diff options
| author | Camille GILLOT <gillot.camille@gmail.com> | 2023-01-26 03:51:26 +0000 |
|---|---|---|
| committer | Camille GILLOT <gillot.camille@gmail.com> | 2023-01-27 20:10:17 +0000 |
| commit | 0e52a671d41a787fe236cfa158d004ee28836b11 (patch) | |
| tree | f70cd2a6db757cd8459734b765b45977bfdd5b66 /tests/ui/async-await/send-bound-async-closure.rs | |
| parent | 60e04d1e8c3afd392551db103651e0ac55b4bd7e (diff) | |
| download | rust-0e52a671d41a787fe236cfa158d004ee28836b11.tar.gz rust-0e52a671d41a787fe236cfa158d004ee28836b11.zip | |
Bless tests.
Diffstat (limited to 'tests/ui/async-await/send-bound-async-closure.rs')
| -rw-r--r-- | tests/ui/async-await/send-bound-async-closure.rs | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/ui/async-await/send-bound-async-closure.rs b/tests/ui/async-await/send-bound-async-closure.rs new file mode 100644 index 00000000000..4e9e7309be0 --- /dev/null +++ b/tests/ui/async-await/send-bound-async-closure.rs @@ -0,0 +1,37 @@ +// edition: 2021 +// check-pass + +// This test verifies that we do not create a query cycle when typechecking has several inference +// variables that point to the same generator interior type. + +use std::future::Future; +use std::pin::Pin; +use std::task::{Context, Poll}; + +type ChannelTask = Pin<Box<dyn Future<Output = ()> + Send>>; + +pub fn register_message_type() -> ChannelTask { + Box::pin(async move { + let f = |__cx: &mut Context<'_>| Poll::<()>::Pending; + PollFn { f }.await + }) +} + +struct PollFn<F> { + f: F, +} + +impl<F> Unpin for PollFn<F> {} + +impl<T, F> Future for PollFn<F> +where + F: FnMut(&mut Context<'_>) -> Poll<T>, +{ + type Output = T; + + fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<T> { + (&mut self.f)(cx) + } +} + +fn main() {} |
