From 9f22d03c22b08ad3912f7509e579db90d68d6d3c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 21 Jul 2024 16:36:35 -0300 Subject: [PATCH 1/3] fix --- vlib/v/checker/fn.v | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 03d91353d17cfb..5feb646ff3bbee 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1100,11 +1100,11 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. } } suggestion := util.new_suggestion(fn_name, mod_func_names) - c.error(suggestion.say('unknown function: ${fn_name} '), node.pos) + c.fatal(suggestion.say('unknown function: ${fn_name} '), node.pos) return ast.void_type } } - c.error('unknown function: ${node.get_name()}', node.pos) + c.fatal('unknown function: ${node.get_name()}', node.pos) return ast.void_type } node.is_file_translated = func.is_file_translated From 986194d33727dfeeeb4510074882fd171b4a1327 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 22 Jul 2024 09:09:24 -0300 Subject: [PATCH 2/3] test --- vlib/v/checker/tests/spawn_wrong_fn_err.out | 14 +++++++++ vlib/v/checker/tests/spawn_wrong_fn_err.vv | 32 +++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 vlib/v/checker/tests/spawn_wrong_fn_err.out create mode 100644 vlib/v/checker/tests/spawn_wrong_fn_err.vv diff --git a/vlib/v/checker/tests/spawn_wrong_fn_err.out b/vlib/v/checker/tests/spawn_wrong_fn_err.out new file mode 100644 index 00000000000000..505e1081d15556 --- /dev/null +++ b/vlib/v/checker/tests/spawn_wrong_fn_err.out @@ -0,0 +1,14 @@ +vlib/v/checker/tests/spawn_wrong_fn_err.vv:29:5: error: unknown function: vlang_ip + 27 | wg.add(2) + 28 | go vlang_time(mut wg) + 29 | go vlang_ip(mut wg) + | ~~~~~~~~~~~~~~~~ + 30 | wg.wait() + 31 | } +vlib/v/checker/tests/spawn_wrong_fn_err.vv:29:5: error: invalid expr + 27 | wg.add(2) + 28 | go vlang_time(mut wg) + 29 | go vlang_ip(mut wg) + | ~~~~~~~~~~~~~~~~ + 30 | wg.wait() + 31 | } diff --git a/vlib/v/checker/tests/spawn_wrong_fn_err.vv b/vlib/v/checker/tests/spawn_wrong_fn_err.vv new file mode 100644 index 00000000000000..7f1fce74f3ea1a --- /dev/null +++ b/vlib/v/checker/tests/spawn_wrong_fn_err.vv @@ -0,0 +1,32 @@ +import net.http +import sync +import time + +fn vlang_time(mut wg sync.WaitGroup) !string { + start := time.ticks() + data := http.get('https://vlang.io/utc_now')! + finish := time.ticks() + println('Finish getting time ${finish - start} ms') + println(data.body) + wg.done() + return data.body +} + +fn remote_ip(mut wg sync.WaitGroup) !string { + start := time.ticks() + data := http.get('https://api.ipify.org')! + finish := time.ticks() + println('Finish getting ip ${finish - start} ms') + println(data.body) + wg.done() + return data.body +} + +fn main() { + mut wg := sync.new_waitgroup() + wg.add(2) + go vlang_time(mut wg) + go vlang_ip(mut wg) + wg.wait() +} + From c95f9334d2dae83cb025820bee256a5e8904c331 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 22 Jul 2024 09:14:33 -0300 Subject: [PATCH 3/3] fix --- vlib/v/checker/fn.v | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 5feb646ff3bbee..d240069e6fbdf4 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1100,11 +1100,11 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. } } suggestion := util.new_suggestion(fn_name, mod_func_names) - c.fatal(suggestion.say('unknown function: ${fn_name} '), node.pos) + c.error(suggestion.say('unknown function: ${fn_name} '), node.pos) return ast.void_type } } - c.fatal('unknown function: ${node.get_name()}', node.pos) + c.error('unknown function: ${node.get_name()}', node.pos) return ast.void_type } node.is_file_translated = func.is_file_translated @@ -2584,6 +2584,10 @@ fn (mut c Checker) spawn_expr(mut node ast.SpawnExpr) ast.Type { // Make sure there are no mutable arguments for arg in node.call_expr.args { if arg.is_mut && !arg.typ.is_ptr() { + if arg.typ == 0 { + c.error('invalid expr', node.pos) + return 0 + } if c.table.final_sym(arg.typ).kind == .array { // allow mutable []array to be passed as mut continue