about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/librustc/back/abi.rs5
-rw-r--r--src/librustc/middle/trans/common.rs1
-rw-r--r--src/librustc/middle/trans/expr.rs24
-rw-r--r--src/librustc/middle/trans/glue.rs15
-rw-r--r--src/librustc/middle/trans/type_.rs1
-rw-r--r--src/libstd/unstable/intrinsics.rs7
6 files changed, 3 insertions, 50 deletions
diff --git a/src/librustc/back/abi.rs b/src/librustc/back/abi.rs
index 945ee645414..8f639a5e499 100644
--- a/src/librustc/back/abi.rs
+++ b/src/librustc/back/abi.rs
@@ -45,9 +45,8 @@ pub static tydesc_field_align: uint = 1u;
 pub static tydesc_field_take_glue: uint = 2u;
 pub static tydesc_field_drop_glue: uint = 3u;
 pub static tydesc_field_visit_glue: uint = 4u;
-pub static tydesc_field_borrow_offset: uint = 5u;
-pub static tydesc_field_name_offset: uint = 6u;
-pub static n_tydesc_fields: uint = 7u;
+pub static tydesc_field_name_offset: uint = 5u;
+pub static n_tydesc_fields: uint = 6u;
 
 // The two halves of a closure: code and environment.
 pub static fn_field_code: uint = 0u;
diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs
index fb0b241b5fc..f98fec7cbef 100644
--- a/src/librustc/middle/trans/common.rs
+++ b/src/librustc/middle/trans/common.rs
@@ -90,7 +90,6 @@ pub struct tydesc_info {
     tydesc: ValueRef,
     size: ValueRef,
     align: ValueRef,
-    borrow_offset: ValueRef,
     name: ValueRef,
     take_glue: Cell<Option<ValueRef>>,
     drop_glue: Cell<Option<ValueRef>>,
diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs
index 7fb66c521b1..72fc3e80228 100644
--- a/src/librustc/middle/trans/expr.rs
+++ b/src/librustc/middle/trans/expr.rs
@@ -398,29 +398,7 @@ pub fn trans_to_datum<'a>(bcx: &'a Block<'a>, expr: &ast::Expr)
                                                      autoderefs));
                 derefd_datum.to_rptr(bcx).to_value_llval(bcx)
             }
-            ty::UniqTraitStore(..) => {
-                // For a ~T box, there may or may not be a header,
-                // depending on whether the type T references managed
-                // boxes. However, since we do not *know* the type T
-                // for objects, this presents a hurdle. Our solution is
-                // to load the "borrow offset" from the type descriptor;
-                // this value will either be 0 or sizeof(BoxHeader), depending
-                // on the type T.
-                let llopaque =
-                    PointerCast(bcx, source_data, Type::opaque().ptr_to());
-                let lltydesc_ptr_ptr =
-                    PointerCast(bcx, vtable,
-                                bcx.ccx().tydesc_type.ptr_to().ptr_to());
-                let lltydesc_ptr =
-                    Load(bcx, lltydesc_ptr_ptr);
-                let borrow_offset_ptr =
-                    GEPi(bcx, lltydesc_ptr,
-                         [0, abi::tydesc_field_borrow_offset]);
-                let borrow_offset =
-                    Load(bcx, borrow_offset_ptr);
-                InBoundsGEP(bcx, llopaque, [borrow_offset])
-            }
-            ty::RegionTraitStore(..) => {
+            ty::UniqTraitStore(..) | ty::RegionTraitStore(..) => {
                 source_data
             }
         };
diff --git a/src/librustc/middle/trans/glue.rs b/src/librustc/middle/trans/glue.rs
index 457cac09fc5..01e33b88dda 100644
--- a/src/librustc/middle/trans/glue.rs
+++ b/src/librustc/middle/trans/glue.rs
@@ -546,17 +546,6 @@ pub fn declare_tydesc(ccx: &CrateContext, t: ty::t) -> @tydesc_info {
                  ppaux::ty_to_str(ccx.tcx, t));
     }
 
-    let has_header = match ty::get(t).sty {
-        ty::ty_box(..) => true,
-        _ => false
-    };
-
-    let borrow_offset = if has_header {
-        ccx.offsetof_gep(llty, [0u, abi::box_field_body])
-    } else {
-        C_uint(ccx, 0)
-    };
-
     let llsize = llsize_of(ccx, llty);
     let llalign = llalign_of(ccx, llty);
     let name = mangle_internal_name_by_type_and_seq(ccx, t, "tydesc").to_managed();
@@ -575,7 +564,6 @@ pub fn declare_tydesc(ccx: &CrateContext, t: ty::t) -> @tydesc_info {
         tydesc: gvar,
         size: llsize,
         align: llalign,
-        borrow_offset: borrow_offset,
         name: ty_name,
         take_glue: Cell::new(None),
         drop_glue: Cell::new(None),
@@ -685,15 +673,12 @@ pub fn emit_tydescs(ccx: &CrateContext) {
               }
             };
 
-        debug!("ti.borrow_offset: {}", ccx.tn.val_to_str(ti.borrow_offset));
-
         let tydesc = C_named_struct(ccx.tydesc_type,
                                     [ti.size, // size
                                      ti.align, // align
                                      take_glue, // take_glue
                                      drop_glue, // drop_glue
                                      visit_glue, // visit_glue
-                                     ti.borrow_offset, // borrow_offset
                                      ti.name]); // name
 
         unsafe {
diff --git a/src/librustc/middle/trans/type_.rs b/src/librustc/middle/trans/type_.rs
index b5349ca323b..833a7848ad3 100644
--- a/src/librustc/middle/trans/type_.rs
+++ b/src/librustc/middle/trans/type_.rs
@@ -220,7 +220,6 @@ impl Type {
                      glue_fn_ty, // take
                      glue_fn_ty, // drop
                      glue_fn_ty, // visit
-                     int_ty, // borrow_offset
                      Type::struct_([Type::i8p(), Type::int(arch)], false)]; // name
         tydesc.set_struct_body(elems, false);
 
diff --git a/src/libstd/unstable/intrinsics.rs b/src/libstd/unstable/intrinsics.rs
index 269622d02c0..18a1790cd9b 100644
--- a/src/libstd/unstable/intrinsics.rs
+++ b/src/libstd/unstable/intrinsics.rs
@@ -98,13 +98,6 @@ pub struct TyDesc {
     // Called by reflection visitor to visit a value of type `T`
     visit_glue: GlueFn,
 
-    // If T represents a box pointer (`@U` or `~U`), then
-    // `borrow_offset` is the amount that the pointer must be adjusted
-    // to find the payload.  This is always derivable from the type
-    // `U`, but in the case of `@Trait` or `~Trait` objects, the type
-    // `U` is unknown.
-    borrow_offset: uint,
-
     // Name corresponding to the type
     name: &'static str
 }