Skip to content

Commit d0e08df

Browse files
committed
Add auto trait that shouldn't leak TAIT test
1 parent 5ac46d7 commit d0e08df

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#![feature(type_alias_impl_trait)]
2+
#![allow(dead_code)]
3+
4+
mod m {
5+
use std::rc::Rc;
6+
7+
type Foo = impl std::fmt::Debug;
8+
9+
pub fn foo() -> Foo {
10+
Rc::new(22_u32)
11+
}
12+
}
13+
14+
fn is_send<T: Send>(_: T) {}
15+
16+
fn main() {
17+
is_send(m::foo());
18+
//~^ ERROR: `Rc<u32>` cannot be sent between threads safely [E0277]
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
error[E0277]: `Rc<u32>` cannot be sent between threads safely
2+
--> $DIR/auto-trait-leakage2.rs:17:5
3+
|
4+
LL | type Foo = impl std::fmt::Debug;
5+
| -------------------- within this `impl Debug`
6+
...
7+
LL | is_send(m::foo());
8+
| ^^^^^^^ `Rc<u32>` cannot be sent between threads safely
9+
|
10+
= help: within `impl Debug`, the trait `Send` is not implemented for `Rc<u32>`
11+
= note: required because it appears within the type `impl Debug`
12+
note: required by a bound in `is_send`
13+
--> $DIR/auto-trait-leakage2.rs:14:15
14+
|
15+
LL | fn is_send<T: Send>(_: T) {}
16+
| ^^^^ required by this bound in `is_send`
17+
18+
error: aborting due to previous error
19+
20+
For more information about this error, try `rustc --explain E0277`.

0 commit comments

Comments
 (0)