@@ -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
@@ -280,13 +276,7 @@ where
280
276
// Clear the "master" drop flag at the end. This is needed
281
277
// because the "master" drop protects the ADT's discriminant,
282
278
// which is invalidated after the ADT is dropped.
283
- let ( succ, unwind) = ( self . succ , self . unwind ) ; // FIXME(#43234)
284
- (
285
- self . drop_flag_reset_block ( DropFlagMode :: Shallow , succ, unwind) ,
286
- unwind. map ( |unwind| {
287
- self . drop_flag_reset_block ( DropFlagMode :: Shallow , unwind, Unwind :: InCleanup )
288
- } ) ,
289
- )
279
+ ( self . drop_flag_reset_block ( DropFlagMode :: Shallow , self . succ , self . unwind ) , self . unwind )
290
280
}
291
281
292
282
/// Creates a full drop ladder, consisting of 2 connected half-drop-ladders
@@ -813,11 +803,7 @@ where
813
803
self . open_drop_for_adt ( def, substs)
814
804
}
815
805
}
816
- ty:: Dynamic ( ..) => {
817
- let unwind = self . unwind ; // FIXME(#43234)
818
- let succ = self . succ ;
819
- self . complete_drop ( Some ( DropFlagMode :: Deep ) , succ, unwind)
820
- }
806
+ ty:: Dynamic ( ..) => self . complete_drop ( self . succ , self . unwind ) ,
821
807
ty:: Array ( ety, size) => {
822
808
let size = size. try_eval_usize ( self . tcx ( ) , self . elaborator . param_env ( ) ) ;
823
809
self . open_drop_for_array ( ety, size)
@@ -829,26 +815,14 @@ where
829
815
}
830
816
831
817
/// Returns a basic block that drop a place using the context
832
- /// and path in `c`. If `mode` is something, also clear `c`
833
- /// according to it.
818
+ /// and path in `c`.
834
819
///
835
820
/// if FLAG(self.path)
836
- /// if let Some(mode) = mode: FLAG(self.path)[mode] = false
837
821
/// drop(self.place)
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) ;
822
+ fn complete_drop ( & mut self , succ : BasicBlock , unwind : Unwind ) -> BasicBlock {
823
+ debug ! ( "complete_drop(succ={:?}, unwind={:?})" , succ, unwind) ;
845
824
846
825
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
826
853
827
self . drop_flag_test_block ( drop_block, succ, unwind)
854
828
}
@@ -861,6 +835,11 @@ where
861
835
) -> BasicBlock {
862
836
debug ! ( "drop_flag_reset_block({:?},{:?})" , self , mode) ;
863
837
838
+ if unwind. is_cleanup ( ) {
839
+ // The drop flag isn't read again on the unwind path, so don't
840
+ // bother setting it.
841
+ return succ;
842
+ }
864
843
let block = self . new_block ( unwind, TerminatorKind :: Goto { target : succ } ) ;
865
844
let block_start = Location { block : block, statement_index : 0 } ;
866
845
self . elaborator . clear_drop_flag ( block_start, self . path , mode) ;
@@ -964,11 +943,6 @@ where
964
943
self . elaborator . patch ( ) . new_temp ( ty, self . source_info . span )
965
944
}
966
945
967
- fn terminator_loc ( & mut self , bb : BasicBlock ) -> Location {
968
- let body = self . elaborator . body ( ) ;
969
- self . elaborator . patch ( ) . terminator_loc ( body, bb)
970
- }
971
-
972
946
fn constant_usize ( & self , val : u16 ) -> Operand < ' tcx > {
973
947
Operand :: Constant ( box Constant {
974
948
span : self . source_info . span ,
0 commit comments