parent
223f5be166
commit
389852b5c0
|
@ -5459,8 +5459,11 @@ fn trans_tag_variant(cx: @local_ctxt, tag_id: ast::node_id,
|
||||||
let arg_ty = arg_tys[i].ty;
|
let arg_ty = arg_tys[i].ty;
|
||||||
let llargval;
|
let llargval;
|
||||||
if ty::type_is_structural(cx.ccx.tcx, arg_ty) ||
|
if ty::type_is_structural(cx.ccx.tcx, arg_ty) ||
|
||||||
ty::type_has_dynamic_size(cx.ccx.tcx, arg_ty) ||
|
ty::type_has_dynamic_size(cx.ccx.tcx, arg_ty) ||
|
||||||
ty::type_is_unique(cx.ccx.tcx, arg_ty) {
|
(ty::type_is_unique(cx.ccx.tcx, arg_ty)
|
||||||
|
&& !ty::type_is_unique_box(cx.ccx.tcx, arg_ty)) {
|
||||||
|
// FIXME: Why do we do this for other unique pointer types but not
|
||||||
|
// unique boxes? Something's not quite right.
|
||||||
llargval = llargptr;
|
llargval = llargptr;
|
||||||
} else { llargval = Load(bcx, llargptr); }
|
} else { llargval = Load(bcx, llargptr); }
|
||||||
bcx = copy_val(bcx, INIT, lldestptr, llargval, arg_ty);
|
bcx = copy_val(bcx, INIT, lldestptr, llargval, arg_ty);
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
fn main() {
|
||||||
|
tag t { t1(int); t2(int); }
|
||||||
|
|
||||||
|
let x = ~t1(10);
|
||||||
|
|
||||||
|
alt *x {
|
||||||
|
t1(a) {
|
||||||
|
assert a == 10;
|
||||||
|
}
|
||||||
|
_ { fail; }
|
||||||
|
}
|
||||||
|
|
||||||
|
alt x {
|
||||||
|
~t1(a) {
|
||||||
|
assert a == 10;
|
||||||
|
}
|
||||||
|
_ { fail; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
fn test1() {
|
||||||
|
tag bar { u(~int); w(int); }
|
||||||
|
|
||||||
|
let x = u(~10);
|
||||||
|
assert alt x {
|
||||||
|
u(a) {
|
||||||
|
log_err a;
|
||||||
|
*a
|
||||||
|
}
|
||||||
|
_ { 66 }
|
||||||
|
} == 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
test1();
|
||||||
|
}
|
|
@ -1,4 +1,3 @@
|
||||||
// xfail-test
|
|
||||||
|
|
||||||
type foo = {a: int, b: uint};
|
type foo = {a: int, b: uint};
|
||||||
tag bar { u(~foo); w(int); }
|
tag bar { u(~foo); w(int); }
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
|
||||||
|
tag bar { u(~int); w(int); }
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
assert alt u(~10) {
|
||||||
|
u(a) {
|
||||||
|
log_err a;
|
||||||
|
*a
|
||||||
|
}
|
||||||
|
_ { 66 }
|
||||||
|
} == 10;
|
||||||
|
}
|
Loading…
Reference in New Issue