From b036a6a492f559baad6b74865d99e60ddb3d81c3 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 22 Jan 2025 11:55:51 -0300 Subject: [PATCH] cgen: fix codegen for assign from unsafe fn returning fixed array (fix #23546) (#23548) --- vlib/v/gen/c/assign.v | 2 +- .../builtin_arrays/array_fixed_from_unsafe_test.v | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/builtin_arrays/array_fixed_from_unsafe_test.v diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v index 58e353737..2c7c4047d 100644 --- a/vlib/v/gen/c/assign.v +++ b/vlib/v/gen/c/assign.v @@ -471,7 +471,7 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) { && (val in [ast.Ident, ast.IndexExpr, ast.CallExpr, ast.SelectorExpr, ast.DumpExpr, ast.InfixExpr] || (val is ast.CastExpr && val.expr !is ast.ArrayInit) || (val is ast.PrefixExpr && val.op == .arrow) - || (val is ast.UnsafeExpr && val.expr in [ast.SelectorExpr, ast.Ident])) + || (val is ast.UnsafeExpr && val.expr in [ast.SelectorExpr, ast.Ident, ast.CallExpr])) g.is_assign_lhs = true g.assign_op = node.op diff --git a/vlib/v/tests/builtin_arrays/array_fixed_from_unsafe_test.v b/vlib/v/tests/builtin_arrays/array_fixed_from_unsafe_test.v new file mode 100644 index 000000000..0bfc0b53f --- /dev/null +++ b/vlib/v/tests/builtin_arrays/array_fixed_from_unsafe_test.v @@ -0,0 +1,10 @@ +@[unsafe] +fn test() [5]int { + return [5]int{} +} + +fn test_main() { + foo := unsafe { test() } + assert foo.len == 5 + assert foo == unsafe { test() } +} -- 2.39.5