@@ -395,22 +395,21 @@ pub fn size_and_align_of_dst<'a, 'tcx>(bcx: &Builder<'a, 'tcx>, t: Ty<'tcx>, inf
395
395
}
396
396
397
397
// Iterates through the elements of a structural type, dropping them.
398
- fn drop_structural_ty < ' a , ' tcx > ( cx : Builder < ' a , ' tcx > , ptr : LvalueRef < ' tcx > ) -> Builder < ' a , ' tcx > {
399
- fn iter_variant < ' a , ' tcx > ( cx : & ' a Builder < ' a , ' tcx > ,
400
- av : LvalueRef < ' tcx > ,
401
- adt_def : & ' tcx AdtDef ,
402
- variant_index : usize ,
403
- substs : & ' tcx Substs < ' tcx > ) {
398
+ fn drop_structural_ty < ' a , ' tcx > (
399
+ cx : Builder < ' a , ' tcx > ,
400
+ mut ptr : LvalueRef < ' tcx >
401
+ ) -> Builder < ' a , ' tcx > {
402
+ fn iter_variant_fields < ' a , ' tcx > (
403
+ cx : & ' a Builder < ' a , ' tcx > ,
404
+ av : LvalueRef < ' tcx > ,
405
+ adt_def : & ' tcx AdtDef ,
406
+ variant_index : usize ,
407
+ substs : & ' tcx Substs < ' tcx >
408
+ ) {
404
409
let variant = & adt_def. variants [ variant_index] ;
405
410
let tcx = cx. tcx ( ) ;
406
411
for ( i, field) in variant. fields . iter ( ) . enumerate ( ) {
407
412
let arg = monomorphize:: field_ty ( tcx, substs, field) ;
408
- let mut av = av. clone ( ) ;
409
- av. ty = LvalueTy :: Downcast {
410
- adt_def : adt_def,
411
- substs : substs,
412
- variant_index : variant_index,
413
- } ;
414
413
let field_ptr = av. trans_field_ptr ( & cx, i) ;
415
414
drop_ty ( & cx, LvalueRef :: new_sized_ty ( field_ptr, arg) ) ;
416
415
}
@@ -479,7 +478,12 @@ fn drop_structural_ty<'a, 'tcx>(cx: Builder<'a, 'tcx>, ptr: LvalueRef<'tcx>) ->
479
478
layout:: UntaggedUnion { .. } => {
480
479
if n_variants != 0 {
481
480
assert ! ( n_variants == 1 ) ;
482
- iter_variant ( & cx, ptr, & adt, 0 , substs) ;
481
+ ptr. ty = LvalueTy :: Downcast {
482
+ adt_def : adt,
483
+ substs : substs,
484
+ variant_index : 0 ,
485
+ } ;
486
+ iter_variant_fields ( & cx, ptr, & adt, 0 , substs) ;
483
487
}
484
488
}
485
489
layout:: CEnum { .. } |
@@ -514,7 +518,12 @@ fn drop_structural_ty<'a, 'tcx>(cx: Builder<'a, 'tcx>, ptr: LvalueRef<'tcx>) ->
514
518
let variant_cx = cx. build_sibling_block ( & variant_cx_name) ;
515
519
let case_val = adt:: trans_case ( & cx, t, Disr :: from ( variant. disr_val ) ) ;
516
520
variant_cx. add_case ( llswitch, case_val, variant_cx. llbb ( ) ) ;
517
- iter_variant ( & variant_cx, ptr, & adt, i, substs) ;
521
+ ptr. ty = LvalueTy :: Downcast {
522
+ adt_def : adt,
523
+ substs : substs,
524
+ variant_index : i,
525
+ } ;
526
+ iter_variant_fields ( & variant_cx, ptr, & adt, i, substs) ;
518
527
variant_cx. br ( next_cx. llbb ( ) ) ;
519
528
}
520
529
cx = next_cx;
0 commit comments