Skip to content

Commit 2dc0911

Browse files
authored
cgen: fix codegen for array of anon struct (fix #23896) (#23907)
1 parent 4e87a1b commit 2dc0911

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

vlib/v/checker/struct.v

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -852,11 +852,13 @@ or use an explicit `unsafe{ a[..] }`, if you do not want a copy of the slice.',
852852
.none {
853853
// var := struct { name: "" }
854854
mut init_fields := []ast.StructField{}
855-
for init_field in node.init_fields {
855+
for mut init_field in node.init_fields {
856856
mut expr := unsafe { init_field }
857+
init_field.typ = c.expr(mut expr.expr)
858+
init_field.expected_type = init_field.typ
857859
init_fields << ast.StructField{
858860
name: init_field.name
859-
typ: c.expr(mut expr.expr)
861+
typ: init_field.typ
860862
is_mut: c.anon_struct_should_be_mut
861863
}
862864
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module main
2+
3+
fn test_main() {
4+
tsts := [struct {
5+
name: 'Vlang'
6+
age: 20
7+
}]
8+
for tst in tsts {
9+
assert '${tst}' == "struct {\n name: 'Vlang'\n age: 20\n}"
10+
assert tst.age == 20
11+
assert tst.name == 'Vlang'
12+
}
13+
}

0 commit comments

Comments
 (0)