Skip to content

Commit 4c76b30

Browse files
committed
glue::trans_struct_drop -> adt
1 parent 27aab83 commit 4c76b30

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/librustc/middle/trans/glue.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ use back::link::*;
1919
use driver::session;
2020
use lib;
2121
use lib::llvm::{llvm, ValueRef, TypeRef, True};
22+
use middle::trans::adt;
2223
use middle::trans::base::*;
2324
use middle::trans::callee;
2425
use middle::trans::closure;
@@ -447,10 +448,10 @@ pub fn make_free_glue(bcx: block, v: ValueRef, t: ty::t) {
447448
match ty::ty_dtor(bcx.tcx(), did) {
448449
ty::NoDtor => bcx,
449450
ty::LegacyDtor(ref dt_id) => {
450-
trans_struct_drop(bcx, v, *dt_id, did, substs, false)
451+
trans_struct_drop(bcx, t, v, *dt_id, did, substs, false)
451452
}
452453
ty::TraitDtor(ref dt_id) => {
453-
trans_struct_drop(bcx, v, *dt_id, did, substs, true)
454+
trans_struct_drop(bcx, t, v, *dt_id, did, substs, true)
454455
}
455456
}
456457
}
@@ -460,6 +461,7 @@ pub fn make_free_glue(bcx: block, v: ValueRef, t: ty::t) {
460461
}
461462

462463
pub fn trans_struct_drop(bcx: block,
464+
t: ty::t,
463465
v0: ValueRef,
464466
dtor_did: ast::def_id,
465467
class_did: ast::def_id,
@@ -500,11 +502,12 @@ pub fn trans_struct_drop(bcx: block,
500502
Call(bcx, dtor_addr, args);
501503

502504
// Drop the fields
505+
let repr = adt::represent_type(bcx.ccx(), t);
503506
let field_tys =
504507
ty::struct_mutable_fields(bcx.tcx(), class_did,
505508
substs);
506509
for vec::eachi(field_tys) |i, fld| {
507-
let llfld_a = GEPi(bcx, v0, struct_field(i));
510+
let llfld_a = adt::trans_GEP(bcx, &repr, v0, 0, i);
508511
bcx = drop_ty(bcx, llfld_a, fld.mt.ty);
509512
}
510513

@@ -534,10 +537,10 @@ pub fn make_drop_glue(bcx: block, v0: ValueRef, t: ty::t) {
534537
let tcx = bcx.tcx();
535538
match ty::ty_dtor(tcx, did) {
536539
ty::TraitDtor(dtor) => {
537-
trans_struct_drop(bcx, v0, dtor, did, substs, true)
540+
trans_struct_drop(bcx, t, v0, dtor, did, substs, true)
538541
}
539542
ty::LegacyDtor(dtor) => {
540-
trans_struct_drop(bcx, v0, dtor, did, substs, false)
543+
trans_struct_drop(bcx, t, v0, dtor, did, substs, false)
541544
}
542545
ty::NoDtor => {
543546
// No dtor? Just the default case

0 commit comments

Comments
 (0)