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() }
+}