2024-08-26 13:45:15 +00:00
|
|
|
//@ run-pass
|
|
|
|
//! This test used to ICE: rust-lang/rust#132103
|
|
|
|
//! Fixed when re-work async drop to shim drop glue coroutine scheme.
|
2025-04-08 13:17:08 +00:00
|
|
|
//@ compile-flags: -Zvalidate-mir -Zinline-mir=yes
|
|
|
|
//@ edition: 2018
|
2024-08-26 13:45:15 +00:00
|
|
|
#![feature(async_drop)]
|
|
|
|
#![allow(incomplete_features)]
|
|
|
|
|
2024-12-15 15:42:00 +00:00
|
|
|
use core::future::{async_drop_in_place, Future};
|
|
|
|
use core::mem::{self};
|
|
|
|
use core::pin::pin;
|
|
|
|
use core::task::{Context, Waker};
|
|
|
|
|
|
|
|
async fn test_async_drop<T>(x: T) {
|
|
|
|
let mut x = mem::MaybeUninit::new(x);
|
|
|
|
pin!(unsafe { async_drop_in_place(x.as_mut_ptr()) });
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let waker = Waker::noop();
|
|
|
|
let mut cx = Context::from_waker(&waker);
|
|
|
|
|
|
|
|
let fut = pin!(async {
|
|
|
|
test_async_drop(test_async_drop(0)).await;
|
|
|
|
});
|
2024-08-26 13:45:15 +00:00
|
|
|
let _ = fut.poll(&mut cx);
|
2024-12-15 15:42:00 +00:00
|
|
|
}
|