@@ -208,6 +208,16 @@ impl<O> AssertKind<O> {
208208 LangItem :: PanicGenFnNonePanic
209209 }
210210 NullPointerDereference => LangItem :: PanicNullPointerDereference ,
211+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => LangItem :: PanicCoroutineResumedDrop ,
212+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
213+ LangItem :: PanicAsyncFnResumedDrop
214+ }
215+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
216+ LangItem :: PanicAsyncGenFnResumedDrop
217+ }
218+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
219+ LangItem :: PanicGenFnNoneDrop
220+ }
211221
212222 BoundsCheck { .. } | MisalignedPointerDereference { .. } => {
213223 bug ! ( "Unexpected AssertKind" )
@@ -298,6 +308,18 @@ impl<O> AssertKind<O> {
298308 ResumedAfterPanic ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
299309 write ! ( f, "\" `gen fn` should just keep returning `None` after panicking\" " )
300310 }
311+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => {
312+ write ! ( f, "\" coroutine resumed after async drop\" " )
313+ }
314+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
315+ write ! ( f, "\" `async fn` resumed after async drop\" " )
316+ }
317+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
318+ write ! ( f, "\" `async gen fn` resumed after async drop\" " )
319+ }
320+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
321+ write ! ( f, "\" `gen fn` resumed after drop\" " )
322+ }
301323 }
302324 }
303325
@@ -345,6 +367,19 @@ impl<O> AssertKind<O> {
345367 middle_assert_coroutine_resume_after_panic
346368 }
347369 NullPointerDereference => middle_assert_null_ptr_deref,
370+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Async , _) ) => {
371+ middle_assert_async_resume_after_drop
372+ }
373+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: AsyncGen , _) ) => {
374+ todo ! ( )
375+ }
376+ ResumedAfterDrop ( CoroutineKind :: Desugared ( CoroutineDesugaring :: Gen , _) ) => {
377+ middle_assert_gen_resume_after_drop
378+ }
379+ ResumedAfterDrop ( CoroutineKind :: Coroutine ( _) ) => {
380+ middle_assert_coroutine_resume_after_drop
381+ }
382+
348383 MisalignedPointerDereference { .. } => middle_assert_misaligned_ptr_deref,
349384 }
350385 }
@@ -377,7 +412,10 @@ impl<O> AssertKind<O> {
377412 add ! ( "left" , format!( "{left:#?}" ) ) ;
378413 add ! ( "right" , format!( "{right:#?}" ) ) ;
379414 }
380- ResumedAfterReturn ( _) | ResumedAfterPanic ( _) | NullPointerDereference => { }
415+ ResumedAfterReturn ( _)
416+ | ResumedAfterPanic ( _)
417+ | NullPointerDereference
418+ | ResumedAfterDrop ( _) => { }
381419 MisalignedPointerDereference { required, found } => {
382420 add ! ( "required" , format!( "{required:#?}" ) ) ;
383421 add ! ( "found" , format!( "{found:#?}" ) ) ;
0 commit comments