// This used to compile the future down to ud2, due to uninhabited types being
// handled incorrectly in coroutines.
//@ compile-flags: -Copt-level=z -Cdebuginfo=2 --edition=2018

//@ run-pass

use std::future::Future;
use std::task::Poll;
use std::task::Context;
use std::pin::Pin;
use std::rc::Rc;

struct Never();
impl Future for Never {
    type Output = ();
    fn poll(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll<Self::Output> {
        Poll::Pending
    }
}

fn main() {
    let fut = async {
        let _rc = Rc::new(()); // Also crashes with Arc
        Never().await;
    };
    let _bla = fut; // Moving the future is required.
}
