@@ -314,7 +314,9 @@ impl<'tcx> InstanceKind<'tcx> {
314
314
if self . requires_inline ( tcx) {
315
315
return true ;
316
316
}
317
- if let ty:: InstanceKind :: DropGlue ( .., Some ( ty) ) = * self {
317
+ if let ty:: InstanceKind :: DropGlue ( .., Some ( ty) )
318
+ | ty:: InstanceKind :: AsyncDropGlueCtorShim ( .., Some ( ty) ) = * self
319
+ {
318
320
// Drop glue generally wants to be instantiated at every codegen
319
321
// unit, but without an #[inline] hint. We should make this
320
322
// available to normal end-users.
@@ -329,29 +331,14 @@ impl<'tcx> InstanceKind<'tcx> {
329
331
// drops of `Option::None` before LTO. We also respect the intent of
330
332
// `#[inline]` on `Drop::drop` implementations.
331
333
return ty. ty_adt_def ( ) . map_or ( true , |adt_def| {
332
- adt_def
333
- . destructor ( tcx)
334
- . map_or_else ( || adt_def. is_enum ( ) , |dtor| tcx. cross_crate_inlinable ( dtor. did ) )
335
- } ) ;
336
- }
337
- if let ty:: InstanceKind :: AsyncDropGlueCtorShim ( .., Some ( ty) ) = * self {
338
- // Async drop glue generally wants to be instantiated at
339
- // every codegen unit, but without an #[inline] hint. We
340
- // should make this available to normal end-users.
341
- if tcx. sess . opts . incremental . is_none ( ) {
342
- return true ;
343
- }
344
- // When compiling with incremental, we can generate a *lot* of
345
- // codegen units. Including drop glue into all of them has a
346
- // considerable compile time cost.
347
- //
348
- // We include enums without destructors to allow, say, optimizing
349
- // drops of `Option::None` before LTO. We also respect the intent of
350
- // `#[inline]` on `Drop::drop` implementations.
351
- return ty. ty_adt_def ( ) . map_or ( true , |adt_def| {
352
- adt_def
353
- . async_destructor ( tcx)
354
- . map_or_else ( || adt_def. is_enum ( ) , |dtor| tcx. cross_crate_inlinable ( dtor. ctor ) )
334
+ match * self {
335
+ ty:: InstanceKind :: DropGlue ( ..) => adt_def. destructor ( tcx) . map ( |dtor| dtor. did ) ,
336
+ ty:: InstanceKind :: AsyncDropGlueCtorShim ( ..) => {
337
+ adt_def. async_destructor ( tcx) . map ( |dtor| dtor. ctor )
338
+ }
339
+ _ => unreachable ! ( ) ,
340
+ }
341
+ . map_or_else ( || adt_def. is_enum ( ) , |did| tcx. cross_crate_inlinable ( did) )
355
342
} ) ;
356
343
}
357
344
if let ty:: InstanceKind :: ThreadLocalShim ( ..) = * self {
0 commit comments