diff options
| -rw-r--r-- | src/librustc/back/abi.rs | 5 | ||||
| -rw-r--r-- | src/librustc/middle/trans/common.rs | 1 | ||||
| -rw-r--r-- | src/librustc/middle/trans/expr.rs | 24 | ||||
| -rw-r--r-- | src/librustc/middle/trans/glue.rs | 15 | ||||
| -rw-r--r-- | src/librustc/middle/trans/type_.rs | 1 | ||||
| -rw-r--r-- | src/libstd/unstable/intrinsics.rs | 7 |
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 } |
