diff options
| author | Graydon Hoare <[email protected]> | 2011-02-02 15:28:11 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-02-02 15:28:11 -0800 |
| commit | b37995664b0149ee92269a3e11f7f6228fe48cc7 (patch) | |
| tree | 29f3ed44da65ffead54a989c8f91830b4edf45d5 /src/comp/middle | |
| parent | Handle missing case in linearize_ty_params. (diff) | |
| download | rust-b37995664b0149ee92269a3e11f7f6228fe48cc7.tar.xz rust-b37995664b0149ee92269a3e11f7f6228fe48cc7.zip | |
Store tydesc for whole body, not just fields, in objs and closures. Handles unusual field alignment.
Diffstat (limited to 'src/comp/middle')
| -rw-r--r-- | src/comp/middle/trans.rs | 19 |
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 = |