@@ -207,6 +207,16 @@ impl<O> AssertKind<O> {
207207 LangItem :: PanicGenFnNonePanic
208208 }
209209 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+ }
210220
211221 BoundsCheck { .. } | MisalignedPointerDereference { .. } => {
212222 bug ! ( "Unexpected AssertKind" )
@@ -297,6 +307,18 @@ impl<O> AssertKind<O> {
297307 ResumedAfterPanic ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
298308 write ! ( f, "\" `gen fn` should just keep returning `None` after panicking\" " )
299309 }
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+ }
300322 }
301323 }
302324
@@ -344,6 +366,19 @@ impl<O> AssertKind<O> {
344366 middle_assert_coroutine_resume_after_panic
345367 }
346368 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+
347382 MisalignedPointerDereference { .. } => middle_assert_misaligned_ptr_deref,
348383 }
349384 }
@@ -376,7 +411,10 @@ impl<O> AssertKind<O> {
376411 add ! ( "left" , format!( "{left:#?}" ) ) ;
377412 add ! ( "right" , format!( "{right:#?}" ) ) ;
378413 }
379- ResumedAfterReturn ( _) | ResumedAfterPanic ( _) | NullPointerDereference => { }
414+ ResumedAfterReturn ( _)
415+ | ResumedAfterPanic ( _)
416+ | NullPointerDereference
417+ | ResumedAfterDrop ( _) => { }
380418 MisalignedPointerDereference { required, found } => {
381419 add ! ( "required" , format!( "{required:#?}" ) ) ;
382420 add ! ( "found" , format!( "{found:#?}" ) ) ;
0 commit comments