summary refs log tree commit diff
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2012-10-03 17:18:24 -0700
committerPatrick Walton <pcwalton@mimiga.net>2012-10-03 17:18:24 -0700
commitf885205b1bb57f270f533aa5e8dc9951c1be603c (patch)
tree66f84d34cce82ca024299c92ec6ea59c6e1c1b2a
parentb34327be0dba2034afe8c14b014ba8da22d5c9f5 (diff)
downloadrust-f885205b1bb57f270f533aa5e8dc9951c1be603c.tar.gz
rust-f885205b1bb57f270f533aa5e8dc9951c1be603c.zip
rustc: Unbreak old-style boxed traits
-rw-r--r--src/rustc/middle/trans/base.rs2
-rw-r--r--src/rustc/middle/trans/meth.rs7
2 files changed, 4 insertions, 5 deletions
diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs
index 70231357003..a23baa8afde 100644
--- a/src/rustc/middle/trans/base.rs
+++ b/src/rustc/middle/trans/base.rs
@@ -2348,7 +2348,7 @@ fn trap(bcx: block) {
 
 fn push_rtcall(ccx: @crate_ctxt, name: ~str, did: ast::def_id) {
     if ccx.rtcalls.contains_key(name) {
-        fail fmt!("multiple definitions for runtime call %s", name);
+        ccx.sess.bug(fmt!("multiple definitions for runtime call %s", name));
     }
     ccx.rtcalls.insert(name, did);
 }
diff --git a/src/rustc/middle/trans/meth.rs b/src/rustc/middle/trans/meth.rs
index 5bf62466595..a94519306a4 100644
--- a/src/rustc/middle/trans/meth.rs
+++ b/src/rustc/middle/trans/meth.rs
@@ -550,9 +550,6 @@ fn trans_trait_cast(bcx: block,
     let v_ty = expr_ty(bcx, val);
 
     let mut llboxdest = GEPi(bcx, lldest, [0u, 1u]);
-    llboxdest = PointerCast(bcx, llboxdest,
-                            T_ptr(type_of::type_of(bcx.ccx(), v_ty)));
-
     if bcx.tcx().legacy_boxed_traits.contains_key(id) {
         // Allocate an @ box and store the value into it
         let {bcx: new_bcx, box: llbox, body: body} = malloc_boxed(bcx, v_ty);
@@ -562,9 +559,11 @@ fn trans_trait_cast(bcx: block,
         revoke_clean(bcx, llbox);
 
         // Store the @ box into the pair
-        Store(bcx, llbox, llboxdest);
+        Store(bcx, llbox, PointerCast(bcx, llboxdest, T_ptr(val_ty(llbox))));
     } else {
         // Just store the @ box into the pair.
+        llboxdest = PointerCast(bcx, llboxdest,
+                                T_ptr(type_of::type_of(bcx.ccx(), v_ty)));
         bcx = expr::trans_into(bcx, val, SaveIn(llboxdest));
     }