// compile-flags: -C opt-level=3 // aux-build: issue-72470-lib.rs // edition:2018 // build-pass // Regression test for issue #72470, using the minimization // in https://github.com/jonas-schievink/llvm-error extern crate issue_72470_lib; use std::future::Future; use std::pin::Pin; use std::sync::Mutex; use std::task::Poll::{Pending, Ready}; #[allow(dead_code)] enum Msg { A(Vec<()>), B, } #[allow(dead_code)] enum Out { _0(Option), Disabled, } #[allow(unused_must_use)] fn main() { let mut rx = issue_72470_lib::unbounded_channel::(); let entity = Mutex::new(()); issue_72470_lib::run(async move { { let output = { let mut fut = rx.recv(); issue_72470_lib::poll_fn(|cx| { loop { let fut = unsafe { Pin::new_unchecked(&mut fut) }; let out = match fut.poll(cx) { Ready(out) => out, Pending => { break; } }; #[allow(unused_variables)] match &out { Some(_msg) => {} _ => break, } return Ready(Out::_0(out)); } Ready(Out::_0(None)) }) .await }; match output { Out::_0(Some(_msg)) => { entity.lock(); } Out::_0(None) => unreachable!(), _ => unreachable!(), } } entity.lock(); }); }