aboutsummaryrefslogtreecommitdiff
path: root/src/comp
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2011-03-07 16:35:00 -0800
committerPatrick Walton <[email protected]>2011-03-07 16:35:00 -0800
commit6ed226c6b3a28f3c10d2176d7dba7e339bf0ab99 (patch)
treee57f199e161802f4f8aca6b6bd45e2eebe6b828e /src/comp
parentrustc: Truncate or zero-extend indexes appropriately. Un-XFAIL integral-index... (diff)
downloadrust-6ed226c6b3a28f3c10d2176d7dba7e339bf0ab99.tar.xz
rust-6ed226c6b3a28f3c10d2176d7dba7e339bf0ab99.zip
rustc: Cast the LLVM representations of tag types when constructing boxes. Un-XFAIL list.rs.
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/middle/trans.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 7ad96ba2..723a845d 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -2266,6 +2266,15 @@ fn trans_unary(@block_ctxt cx, ast.unop op,
vec(C_int(0),
C_int(abi.box_rc_field_body)));
sub.bcx.build.Store(C_int(1), rc);
+
+ // Cast the body type to the type of the value. This is needed to
+ // make tags work, since tags have a different LLVM type depending
+ // on whether they're boxed or not.
+ if (!ty.type_has_dynamic_size(e_ty)) {
+ auto llety = T_ptr(type_of(sub.bcx.fcx.ccx, e_ty));
+ body = sub.bcx.build.PointerCast(body, llety);
+ }
+
sub = copy_ty(sub.bcx, INIT, body, e_val, e_ty);
ret res(sub.bcx, box);
}