Skip to content

Commit f715d49

Browse files
authored
cgen: fix struct field init with fixed array using index (fix #22616) (#22641)
1 parent 9e67739 commit f715d49

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

vlib/v/gen/c/struct.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -673,7 +673,8 @@ fn (mut g Gen) struct_init_field(sfield ast.StructInitField, language ast.Langua
673673
info := field_unwrap_sym.info as ast.ArrayFixed
674674
g.fixed_array_var_init(g.expr_string(sfield.expr), sfield.expr.is_auto_deref_var(),
675675
info.elem_type, info.size)
676-
} else if field_unwrap_sym.kind == .array_fixed && sfield.expr is ast.CallExpr {
676+
} else if field_unwrap_sym.kind == .array_fixed && (sfield.expr is ast.CallExpr
677+
|| (sfield.expr is ast.ArrayInit && sfield.expr.has_index)) {
677678
info := field_unwrap_sym.info as ast.ArrayFixed
678679
tmp_var := g.expr_with_var(sfield.expr, sfield.typ, sfield.expected_type)
679680
g.fixed_array_var_init(tmp_var, false, info.elem_type, info.size)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
fn test_struct_field_init_with_fixed_array_init() {
2+
mut a := [5]int{init: [1, 2][index] or { 0 }}
3+
struct ArrayTest {
4+
aa [5]int
5+
}
6+
7+
array_a := ArrayTest{
8+
aa: a
9+
}
10+
println('array_a: ${array_a}')
11+
assert array_a.aa == [1, 2, 0, 0, 0]!
12+
13+
array_b := ArrayTest{
14+
aa: [5]int{init: [1, 2][index] or { 0 }}
15+
}
16+
println('array_b: ${array_b}')
17+
assert array_b.aa == [1, 2, 0, 0, 0]!
18+
}

0 commit comments

Comments
 (0)