about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2013-04-22 18:08:24 -0700
committerPatrick Walton <pcwalton@mimiga.net>2013-04-29 14:30:53 -0700
commit0780b2830f06babba21dcd9f6c325576dd374183 (patch)
tree0c5cd24f8cc70605dd901076e7471e1257b45a05 /src
parentc6a9e28842b0e8ae675b552b742312a9ffa60120 (diff)
librustc: Remove the legacy mode in the type visitor intrinsic.
Diffstat (limited to 'src')
-rw-r--r--src/librustc/front/intrinsic.rs2
-rw-r--r--src/librustc/middle/trans/foreign.rs9
-rw-r--r--src/librustc/middle/typeck/check/mod.rs2
3 files changed, 9 insertions, 4 deletions
diff --git a/src/librustc/front/intrinsic.rs b/src/librustc/front/intrinsic.rs
index dcf300bd31d..452623c2742 100644
--- a/src/librustc/front/intrinsic.rs
+++ b/src/librustc/front/intrinsic.rs
@@ -132,7 +132,7 @@ pub mod intrinsic {
         #[abi = "rust-intrinsic"]
         pub extern "rust-intrinsic" {
             pub fn get_tydesc<T>() -> *();
-            pub fn visit_tydesc(++td: *TyDesc, &&tv: @TyVisitor);
+            pub fn visit_tydesc(++td: *TyDesc, ++tv: @TyVisitor);
         }
     }
 }
diff --git a/src/librustc/middle/trans/foreign.rs b/src/librustc/middle/trans/foreign.rs
index 98caaa81416..4e3db1ea50c 100644
--- a/src/librustc/middle/trans/foreign.rs
+++ b/src/librustc/middle/trans/foreign.rs
@@ -771,9 +771,14 @@ pub fn trans_intrinsic(ccx: @CrateContext,
         ~"visit_tydesc" => {
             let td = get_param(decl, first_real_arg);
             let visitor = get_param(decl, first_real_arg + 1u);
+            let llvisitorptr = alloca(bcx, val_ty(visitor));
+            Store(bcx, visitor, llvisitorptr);
             let td = PointerCast(bcx, td, T_ptr(ccx.tydesc_type));
-            glue::call_tydesc_glue_full(bcx, visitor, td,
-                                        abi::tydesc_field_visit_glue, None);
+            glue::call_tydesc_glue_full(bcx,
+                                        llvisitorptr,
+                                        td,
+                                        abi::tydesc_field_visit_glue,
+                                        None);
         }
         ~"frame_address" => {
             let frameaddress = *ccx.intrinsics.get(&~"llvm.frameaddress");
diff --git a/src/librustc/middle/typeck/check/mod.rs b/src/librustc/middle/typeck/check/mod.rs
index 4fad5b15ff6..f81c7bb8524 100644
--- a/src/librustc/middle/typeck/check/mod.rs
+++ b/src/librustc/middle/typeck/check/mod.rs
@@ -3479,7 +3479,7 @@ pub fn check_intrinsic_type(ccx: @mut CrateCtxt, it: @ast::foreign_item) {
           let td_ptr = ty::mk_ptr(ccx.tcx, ty::mt {ty: tydesc_ty,
                                                    mutbl: ast::m_imm});
           (0u, ~[arg(ast::by_copy, td_ptr),
-                 arg(ast::by_ref, visitor_object_ty)], ty::mk_nil())
+                 arg(ast::by_copy, visitor_object_ty)], ty::mk_nil())
       }
       ~"frame_address" => {
         let fty = ty::mk_closure(ccx.tcx, ty::ClosureTy {