Skip to content

Commit 7f62346

Browse files
authored
cgen: fix error for if expr returning sumtype (#13752)
1 parent 315e07a commit 7f62346

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

vlib/v/gen/c/if.v

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,11 @@ fn (mut g Gen) if_expr(node ast.IfExpr) {
200200
}
201201
}
202202
if needs_tmp_var {
203+
if node.is_expr && g.table.sym(node.typ).kind == .sum_type {
204+
g.expected_cast_type = node.typ
205+
}
203206
g.stmts_with_tmp_var(branch.stmts, tmp)
207+
g.expected_cast_type = 0
204208
} else {
205209
// restore if_expr stmt header pos
206210
stmt_pos := g.nth_stmt_pos(0)
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
struct A_str {}
2+
3+
struct B_str {}
4+
5+
type Token = A_str | B_str
6+
7+
fn next(mut v []Token) Token {
8+
return if v.len > 0 { v.pop() } else { A_str{} }
9+
}
10+
11+
fn test_if_expr_with_sumtype() {
12+
mut arr := []Token{}
13+
ret1 := next(mut arr)
14+
println(ret1)
15+
assert '$ret1' == 'Token(A_str{})'
16+
17+
arr << A_str{}
18+
arr << B_str{}
19+
20+
ret2 := next(mut arr)
21+
println(ret2)
22+
assert '$ret2' == 'Token(B_str{})'
23+
}

0 commit comments

Comments
 (0)