| //@ revisions: current next | |
| //@ ignore-compare-mode-next-solver (explicit revisions) | |
| //@[next] compile-flags: -Znext-solver | |
| //@ edition: 2024 | |
| //@[current] check-pass | |
| // This previously caused an ICE with the new solver. | |
| // The delayed coroutine obligations were checked with the | |
| // opaque types inferred by borrowck. | |
| // | |
| // One of these delayed obligations failed with overflow in | |
| // borrowck, causing us to taint `type_of` for the opaque. This | |
| // then caused us to also not emit an error when checking the | |
| // coroutine obligations. | |
| fn build_multiple<'a>() -> impl Sized { | |
| spawn(async { build_dependencies().await }); | |
| //[next]~^ ERROR overflow evaluating the requirement | |
| } | |
| // Adding an explicit `Send` bound fixes it. | |
| // Proving `build_dependencies(): Send` in `build_multiple` adds | |
| // addiitional defining uses/placeholders. | |
| fn build_dependencies() -> impl Future<Output = ()> /* + Send */ { | |
| async { | |
| Box::pin(build_dependencies()).await; | |
| async { build_multiple() }.await; | |
| } | |
| } | |
| fn spawn<F: Send>(_: F) {} | |
| fn main() {} |