Skip to content

Commit 7e93332

Browse files
authored
cgen: fix sumtype alias cast to same sumtype (fix #25431) (#25443)
1 parent 10dff91 commit 7e93332

2 files changed

Lines changed: 22 additions & 0 deletions

File tree

‎vlib/v/gen/c/cgen.v‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5595,6 +5595,10 @@ fn (mut g Gen) cast_expr(node ast.CastExpr) {
55955595
}
55965596
node_typ_is_option := node.typ.has_flag(.option)
55975597
if sym.kind in [.sum_type, .interface] {
5598+
if g.table.unaliased_type(expr_type) == node_typ {
5599+
g.expr(node.expr)
5600+
return
5601+
}
55985602
if node_typ_is_option && node.expr is ast.None {
55995603
g.gen_option_error(node.typ, node.expr)
56005604
} else if node.expr is ast.Ident && g.comptime.is_comptime_variant_var(node.expr) {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
struct Number {}
2+
3+
struct String {}
4+
5+
struct Variable {}
6+
7+
struct FunctionCall {}
8+
9+
type Value = Number | String | Variable | FunctionCall
10+
type Statement = Value
11+
12+
fn test_main() {
13+
s := Value(Statement(Value(Number{})))
14+
assert '${s}' == 'Value(Number{})'
15+
16+
s2 := Statement(Value(Number{}))
17+
assert '${s2}' == 'Statement(Value(Number{}))'
18+
}

0 commit comments

Comments
 (0)