cgen: fix shared variable assign generic structs (fix #19798) (#19800)

This commit is contained in:
shove 2023-11-08 03:23:42 +08:00 committed by GitHub
parent 92a72df5f8
commit 6fa9a84753
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 1 deletions

View File

@ -570,11 +570,18 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
if val_sym.info.generic_types.len > 0 {
if val is ast.StructInit {
var_styp := g.typ(val.typ)
if var_type.has_flag(.shared_f) {
g.write('__shared__${var_styp}* ')
} else {
g.write('${var_styp} ')
}
is_used_var_styp = true
} else if val is ast.PrefixExpr {
if val.op == .amp && val.right is ast.StructInit {
var_styp := g.typ(val.right.typ.ref())
if var_type.has_flag(.shared_f) {
g.write('__shared__')
}
g.write('${var_styp} ')
is_used_var_styp = true
}

View File

@ -0,0 +1,14 @@
struct Foo[T] {
a T
}
fn test_shared_struct_has_generics() {
shared foo := Foo[int]{1}
lock foo {
assert foo.a == 1
}
shared bar := &Foo[int]{1}
lock bar {
assert bar.a == 1
}
}