Skip to content

Commit 2d314fc

Browse files
authored
cgen: fix codegen for generic selector expr (fix #22974) (#23132)
1 parent 09fff08 commit 2d314fc

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

vlib/v/gen/c/cgen.v

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4278,7 +4278,7 @@ fn (mut g Gen) selector_expr(node ast.SelectorExpr) {
42784278
}
42794279
alias_to_ptr := sym.info is ast.Alias && sym.info.parent_type.is_ptr()
42804280
if field_is_opt
4281-
|| ((node.expr_type.is_ptr() || sym.kind == .chan || alias_to_ptr)
4281+
|| ((g.unwrap_generic(node.expr_type).is_ptr() || sym.kind == .chan || alias_to_ptr)
42824282
&& node.from_embed_types.len == 0)
42834283
|| (node.expr.is_as_cast() && g.inside_smartcast) {
42844284
g.write('->')
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module main
2+
3+
struct Foo123 {
4+
field string = 'foobar'
5+
}
6+
7+
fn gen_func[T](value T) string {
8+
$if T is i32 {
9+
return '123'
10+
} $else $if T is &Foo123 {
11+
return value.field
12+
} $else {
13+
return '123'
14+
}
15+
}
16+
17+
fn test_main() {
18+
assert gen_func[&Foo123](&Foo123{}) == 'foobar'
19+
}

0 commit comments

Comments
 (0)