File tree Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Expand file tree Collapse file tree 2 files changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ // edition:2018
2
+ // #70935: Check if we do not emit snippet
3
+ // with newlines which lead complex diagnostics.
4
+
5
+ use std:: future:: Future ;
6
+
7
+ async fn baz < T > ( _c : impl FnMut ( ) -> T ) where T : Future < Output =( ) > {
8
+ }
9
+
10
+ fn foo ( tx : std:: sync:: mpsc:: Sender < i32 > ) -> impl Future + Send {
11
+ //~^ ERROR: future cannot be sent between threads safely
12
+ async move {
13
+ baz ( || async {
14
+ foo ( tx. clone ( ) ) ;
15
+ } ) . await ;
16
+ }
17
+ }
18
+
19
+ fn bar ( _s : impl Future + Send ) {
20
+ }
21
+
22
+ fn main ( ) {
23
+ let ( tx, _rx) = std:: sync:: mpsc:: channel ( ) ;
24
+ bar ( foo ( tx) ) ;
25
+ }
Original file line number Diff line number Diff line change
1
+ error: future cannot be sent between threads safely
2
+ --> $DIR/issue-70935-complex-spans.rs:10:45
3
+ |
4
+ LL | fn foo(tx: std::sync::mpsc::Sender<i32>) -> impl Future + Send {
5
+ | ^^^^^^^^^^^^^^^^^^ future created by async block is not `Send`
6
+ LL |
7
+ LL | / async move {
8
+ LL | | baz(|| async{
9
+ LL | | foo(tx.clone());
10
+ LL | | }).await;
11
+ LL | | }
12
+ | |_____- this returned value is of type `impl std::future::Future`
13
+ |
14
+ = help: the trait `std::marker::Sync` is not implemented for `std::sync::mpsc::Sender<i32>`
15
+ note: future is not `Send` as this value is used across an await
16
+ --> $DIR/issue-70935-complex-spans.rs:13:9
17
+ |
18
+ LL | baz(|| async{
19
+ | __________^___-
20
+ | | _________|
21
+ | ||
22
+ LL | || foo(tx.clone());
23
+ LL | || }).await;
24
+ | || - ^- value is later dropped here
25
+ | ||_________|______|
26
+ | |__________| await occurs here, with value maybe used later
27
+ | has type `[closure@$DIR/issue-70935-complex-spans.rs:13:13: 15:10 tx:&std::sync::mpsc::Sender<i32>]` which is not `Send`
28
+ = note: the return type of a function must have a statically known size
29
+
30
+ error: aborting due to previous error
31
+
You can’t perform that action at this time.
0 commit comments