From 80e09e2f910560a9944790ed73c3c23e9e0573a7 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sun, 29 Sep 2024 02:02:38 -0300 Subject: [PATCH] checker: fix compiler panic, when calling an unknown function in `C.printf(c'%f\n', sin(2))` (fix #22343) (#22348) --- vlib/v/checker/fn.v | 2 +- vlib/v/checker/tests/unknown_fn_call_err.out | 6 ++++++ vlib/v/checker/tests/unknown_fn_call_err.vv | 5 +++++ 3 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 vlib/v/checker/tests/unknown_fn_call_err.out create mode 100644 vlib/v/checker/tests/unknown_fn_call_err.vv diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index e224c3f2a..1b9108d16 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -1285,7 +1285,7 @@ fn (mut c Checker) fn_call(mut node ast.CallExpr, mut continue_check &bool) ast. c.expected_type = expected_type } typ := if already_checked && mut call_arg.expr is ast.CallExpr { - call_arg.expr.return_type + node.args[i].typ } else { c.expr(mut call_arg.expr) } diff --git a/vlib/v/checker/tests/unknown_fn_call_err.out b/vlib/v/checker/tests/unknown_fn_call_err.out new file mode 100644 index 000000000..8625c8ba3 --- /dev/null +++ b/vlib/v/checker/tests/unknown_fn_call_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/unknown_fn_call_err.vv:4:20: error: unknown function: sin + 2 | + 3 | fn main() { + 4 | C.printf(c'%f\n', sin(2)) + | ~~~~~~ + 5 | } diff --git a/vlib/v/checker/tests/unknown_fn_call_err.vv b/vlib/v/checker/tests/unknown_fn_call_err.vv new file mode 100644 index 000000000..f9fd00c92 --- /dev/null +++ b/vlib/v/checker/tests/unknown_fn_call_err.vv @@ -0,0 +1,5 @@ +module main + +fn main() { + C.printf(c'%f\n', sin(2)) +} -- 2.39.5