mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 13:04:42 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			38 lines
		
	
	
		
			796 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			796 B
		
	
	
	
		
			Rust
		
	
	
	
	
	
| //@ 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 coroutine 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() {}
 | 
