@@ -163,8 +163,6 @@ where
163
163
. patch_terminator ( bb, TerminatorKind :: Goto { target : self . succ } ) ;
164
164
}
165
165
DropStyle :: Static => {
166
- let loc = self . terminator_loc ( bb) ;
167
- self . elaborator . clear_drop_flag ( loc, self . path , DropFlagMode :: Deep ) ;
168
166
self . elaborator . patch ( ) . patch_terminator (
169
167
bb,
170
168
TerminatorKind :: Drop {
@@ -175,9 +173,7 @@ where
175
173
) ;
176
174
}
177
175
DropStyle :: Conditional => {
178
- let unwind = self . unwind ; // FIXME(#43234)
179
- let succ = self . succ ;
180
- let drop_bb = self . complete_drop ( Some ( DropFlagMode :: Deep ) , succ, unwind) ;
176
+ let drop_bb = self . complete_drop ( self . succ , self . unwind ) ;
181
177
self . elaborator
182
178
. patch ( )
183
179
. patch_terminator ( bb, TerminatorKind :: Goto { target : drop_bb } ) ;
@@ -249,7 +245,7 @@ where
249
245
// our own drop flag.
250
246
path : self . path ,
251
247
}
252
- . complete_drop ( None , succ, unwind)
248
+ . complete_drop ( succ, unwind)
253
249
}
254
250
}
255
251
@@ -278,13 +274,7 @@ where
278
274
// Clear the "master" drop flag at the end. This is needed
279
275
// because the "master" drop protects the ADT's discriminant,
280
276
// which is invalidated after the ADT is dropped.
281
- let ( succ, unwind) = ( self . succ , self . unwind ) ; // FIXME(#43234)
282
- (
283
- self . drop_flag_reset_block ( DropFlagMode :: Shallow , succ, unwind) ,
284
- unwind. map ( |unwind| {
285
- self . drop_flag_reset_block ( DropFlagMode :: Shallow , unwind, Unwind :: InCleanup )
286
- } ) ,
287
- )
277
+ ( self . drop_flag_reset_block ( DropFlagMode :: Shallow , self . succ , self . unwind ) , self . unwind )
288
278
}
289
279
290
280
/// Creates a full drop ladder, consisting of 2 connected half-drop-ladders
@@ -820,11 +810,7 @@ where
820
810
self . open_drop_for_adt ( def, substs)
821
811
}
822
812
}
823
- ty:: Dynamic ( ..) => {
824
- let unwind = self . unwind ; // FIXME(#43234)
825
- let succ = self . succ ;
826
- self . complete_drop ( Some ( DropFlagMode :: Deep ) , succ, unwind)
827
- }
813
+ ty:: Dynamic ( ..) => self . complete_drop ( self . succ , self . unwind ) ,
828
814
ty:: Array ( ety, size) => {
829
815
let size = size. try_eval_usize ( self . tcx ( ) , self . elaborator . param_env ( ) ) ;
830
816
self . open_drop_for_array ( ety, size)
@@ -835,20 +821,10 @@ where
835
821
}
836
822
}
837
823
838
- fn complete_drop (
839
- & mut self ,
840
- drop_mode : Option < DropFlagMode > ,
841
- succ : BasicBlock ,
842
- unwind : Unwind ,
843
- ) -> BasicBlock {
844
- debug ! ( "complete_drop({:?},{:?})" , self , drop_mode) ;
824
+ fn complete_drop ( & mut self , succ : BasicBlock , unwind : Unwind ) -> BasicBlock {
825
+ debug ! ( "complete_drop(succ={:?}, unwind={:?})" , succ, unwind) ;
845
826
846
827
let drop_block = self . drop_block ( succ, unwind) ;
847
- let drop_block = if let Some ( mode) = drop_mode {
848
- self . drop_flag_reset_block ( mode, drop_block, unwind)
849
- } else {
850
- drop_block
851
- } ;
852
828
853
829
self . drop_flag_test_block ( drop_block, succ, unwind)
854
830
}
@@ -861,6 +837,11 @@ where
861
837
) -> BasicBlock {
862
838
debug ! ( "drop_flag_reset_block({:?},{:?})" , self , mode) ;
863
839
840
+ if unwind. is_cleanup ( ) {
841
+ // The drop flag isn't read again on the unwind path, so don't
842
+ // bother setting it.
843
+ return succ;
844
+ }
864
845
let block = self . new_block ( unwind, TerminatorKind :: Goto { target : succ } ) ;
865
846
let block_start = Location { block, statement_index : 0 } ;
866
847
self . elaborator . clear_drop_flag ( block_start, self . path , mode) ;
@@ -969,11 +950,6 @@ where
969
950
self . elaborator . patch ( ) . new_temp ( ty, self . source_info . span )
970
951
}
971
952
972
- fn terminator_loc ( & mut self , bb : BasicBlock ) -> Location {
973
- let body = self . elaborator . body ( ) ;
974
- self . elaborator . patch ( ) . terminator_loc ( body, bb)
975
- }
976
-
977
953
fn constant_usize ( & self , val : u16 ) -> Operand < ' tcx > {
978
954
Operand :: Constant ( box Constant {
979
955
span : self . source_info . span ,
0 commit comments