@@ -207,6 +207,16 @@ impl<O> AssertKind<O> {
207
207
LangItem :: PanicGenFnNonePanic
208
208
}
209
209
NullPointerDereference => LangItem :: PanicNullPointerDereference ,
210
+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => LangItem :: PanicCoroutineResumedDrop ,
211
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
212
+ LangItem :: PanicAsyncFnResumedDrop
213
+ }
214
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
215
+ LangItem :: PanicAsyncGenFnResumedDrop
216
+ }
217
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
218
+ LangItem :: PanicGenFnNoneDrop
219
+ }
210
220
211
221
BoundsCheck { .. } | MisalignedPointerDereference { .. } => {
212
222
bug ! ( "Unexpected AssertKind" )
@@ -297,6 +307,18 @@ impl<O> AssertKind<O> {
297
307
ResumedAfterPanic ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
298
308
write ! ( f, "\" `gen fn` should just keep returning `None` after panicking\" " )
299
309
}
310
+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => {
311
+ write ! ( f, "\" coroutine resumed after async drop\" " )
312
+ }
313
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
314
+ write ! ( f, "\" `async fn` resumed after async drop\" " )
315
+ }
316
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
317
+ write ! ( f, "\" `async gen fn` resumed after async drop\" " )
318
+ }
319
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
320
+ write ! ( f, "\" `gen fn` resumed after drop\" " )
321
+ }
300
322
}
301
323
}
302
324
@@ -344,6 +366,19 @@ impl<O> AssertKind<O> {
344
366
middle_assert_coroutine_resume_after_panic
345
367
}
346
368
NullPointerDereference => middle_assert_null_ptr_deref,
369
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
370
+ middle_assert_async_resume_after_drop
371
+ }
372
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
373
+ todo ! ( )
374
+ }
375
+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
376
+ middle_assert_gen_resume_after_drop
377
+ }
378
+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => {
379
+ middle_assert_coroutine_resume_after_drop
380
+ }
381
+
347
382
MisalignedPointerDereference { .. } => middle_assert_misaligned_ptr_deref,
348
383
}
349
384
}
@@ -376,7 +411,10 @@ impl<O> AssertKind<O> {
376
411
add ! ( "left" , format!( "{left:#?}" ) ) ;
377
412
add ! ( "right" , format!( "{right:#?}" ) ) ;
378
413
}
379
- ResumedAfterReturn ( _) | ResumedAfterPanic ( _) | NullPointerDereference => { }
414
+ ResumedAfterReturn ( _)
415
+ | ResumedAfterPanic ( _)
416
+ | NullPointerDereference
417
+ | ResumedAfterDrop ( _) => { }
380
418
MisalignedPointerDereference { required, found } => {
381
419
add ! ( "required" , format!( "{required:#?}" ) ) ;
382
420
add ! ( "found" , format!( "{found:#?}" ) ) ;
0 commit comments