aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGraydon Hoare <[email protected]>2011-02-02 15:28:11 -0800
committerGraydon Hoare <[email protected]>2011-02-02 15:28:11 -0800
commitb37995664b0149ee92269a3e11f7f6228fe48cc7 (patch)
tree29f3ed44da65ffead54a989c8f91830b4edf45d5
parentHandle missing case in linearize_ty_params. (diff)
downloadrust-b37995664b0149ee92269a3e11f7f6228fe48cc7.tar.xz
rust-b37995664b0149ee92269a3e11f7f6228fe48cc7.zip
Store tydesc for whole body, not just fields, in objs and closures. Handles unusual field alignment.
-rw-r--r--src/comp/middle/trans.rs19
1 files changed, 5 insertions, 14 deletions
diff --git a/src/comp/middle/trans.rs b/src/comp/middle/trans.rs
index 66ce8186..36f54ea8 100644
--- a/src/comp/middle/trans.rs
+++ b/src/comp/middle/trans.rs
@@ -1185,16 +1185,12 @@ fn make_drop_glue(@block_ctxt cx, ValueRef v, @ty.t t) -> result {
vec(C_int(0),
C_int(abi.box_rc_field_body)));
- auto fields =
- cx.build.GEP(body,
- vec(C_int(0),
- C_int(abi.obj_body_elt_fields)));
auto tydescptr =
cx.build.GEP(body,
vec(C_int(0),
C_int(abi.obj_body_elt_tydesc)));
- call_tydesc_glue_full(cx, fields, cx.build.Load(tydescptr),
+ call_tydesc_glue_full(cx, body, cx.build.Load(tydescptr),
abi.tydesc_field_drop_glue_off);
// Then free the body.
@@ -1223,17 +1219,12 @@ fn make_drop_glue(@block_ctxt cx, ValueRef v, @ty.t t) -> result {
vec(C_int(0),
C_int(abi.box_rc_field_body)));
- auto bindings =
- cx.build.GEP(body,
- vec(C_int(0),
- C_int(abi.closure_elt_bindings)));
-
auto tydescptr =
cx.build.GEP(body,
vec(C_int(0),
C_int(abi.closure_elt_tydesc)));
- call_tydesc_glue_full(cx, bindings, cx.build.Load(tydescptr),
+ call_tydesc_glue_full(cx, body, cx.build.Load(tydescptr),
abi.tydesc_field_drop_glue_off);
@@ -3659,9 +3650,9 @@ fn trans_obj(@crate_ctxt cx, &ast._obj ob, ast.def_id oid,
vec(0, abi.obj_body_elt_tydesc));
bcx = body_tydesc.bcx;
- auto fields_tydesc = get_tydesc(bcx, fields_ty);
- bcx = fields_tydesc.bcx;
- bcx.build.Store(fields_tydesc.val, body_tydesc.val);
+ auto body_td = get_tydesc(bcx, body_ty);
+ bcx = body_td.bcx;
+ bcx.build.Store(body_td.val, body_tydesc.val);
// Copy args into body fields.
auto body_fields =