From fc640f7ce00ff61ee32f04ffce6dccb73472fc9c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 26 Apr 2025 12:21:32 -0300 Subject: [PATCH] cgen: fix codegen for thread.call() on var auto heap (fix #24326) (#24327) --- vlib/v/gen/c/array.v | 3 +++ .../v/tests/concurrency/thread_wait_ptr_test.v | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+) create mode 100644 vlib/v/tests/concurrency/thread_wait_ptr_test.v diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 2dbd2cc79e..22ed018318 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -1441,6 +1441,9 @@ fn (mut g Gen) gen_array_wait(node ast.CallExpr) { eltyp := g.table.sym(thread_ret_type).cname fn_name := g.register_thread_array_wait_call(eltyp) g.write('${fn_name}(') + if node.left_type.is_ptr() { + g.write('*') + } g.expr(node.left) g.write(')') } diff --git a/vlib/v/tests/concurrency/thread_wait_ptr_test.v b/vlib/v/tests/concurrency/thread_wait_ptr_test.v new file mode 100644 index 0000000000..c164d8b698 --- /dev/null +++ b/vlib/v/tests/concurrency/thread_wait_ptr_test.v @@ -0,0 +1,18 @@ +import math { sqrt } +import time + +fn get_hypot(a f64, b f64) f64 { + time.sleep(100 * time.millisecond) + c := sqrt(a * a + b * b) + return c +} + +fn test_main() { + mut arr := &[]thread f64{} + for num in 1 .. 1000 { + g := go get_hypot(num, num) + arr << g + } + result := arr.wait() + assert result[0] == 1.4142135623730951 +}