Skip to content

Commit 4ffe1be

Browse files
committed
---
yaml --- r: 45033 b: refs/heads/master c: 71b6e94 h: refs/heads/master i: 45031: d3c226c v: v3
1 parent 429269e commit 4ffe1be

File tree

2 files changed

+9
-6
lines changed

2 files changed

+9
-6
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
refs/heads/master: 5ca4fdfc981a9c0c7ecf3e23c4b26c05a6a7d2fe
2+
refs/heads/master: 71b6e945c11a3a0f44e5e45bcad4e7bddf35ba8a
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: a6d9689399d091c3265f00434a69c551a61c28dc
55
refs/heads/try: ef355f6332f83371e4acf04fc4eb940ab41d78d3

trunk/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)