Handle structural types as the result of if expressions
This commit is contained in:
parent
a5a319fa04
commit
aced4ce145
@ -3049,6 +3049,9 @@ fn trans_if(@block_ctxt cx, @ast.expr cond,
|
||||
// FIXME: Handle dynamic type sizes
|
||||
auto expr_ty = ty.expr_ty(elexpr);
|
||||
expr_llty = type_of(else_res.bcx.fcx.ccx, expr_ty);
|
||||
if (ty.type_is_structural(expr_ty)) {
|
||||
expr_llty = T_ptr(expr_llty);
|
||||
}
|
||||
}
|
||||
case (_) {
|
||||
else_res = res(else_cx, C_nil());
|
||||
|
24
src/test/run-pass/expr-if-struct.rs
Normal file
24
src/test/run-pass/expr-if-struct.rs
Normal file
@ -0,0 +1,24 @@
|
||||
// xfail-boot
|
||||
// -*- rust -*-
|
||||
|
||||
// Tests for if as expressions returning structural types
|
||||
|
||||
fn test_rec() {
|
||||
auto res = if (true) { rec(i = 100) } else { rec(i = 101) };
|
||||
check (res == rec(i = 100));
|
||||
}
|
||||
|
||||
fn test_tag() {
|
||||
tag mood {
|
||||
happy;
|
||||
sad;
|
||||
}
|
||||
|
||||
auto res = if (true) { happy } else { sad };
|
||||
check (res == happy);
|
||||
}
|
||||
|
||||
fn main() {
|
||||
test_rec();
|
||||
test_tag();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user