diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v index 58e3537371ae74..2c7c4047ddfa91 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 00000000000000..0bfc0b53f8e987 --- /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() } +}