about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2017-11-26 12:32:30 -0800
committerEsteban Küber <esteban@kuber.com.ar>2017-11-26 12:32:30 -0800
commitaabb6043137f71c686a77bf4bda4eb37f1a9fe22 (patch)
tree9a74974dda909a6f9a1a9aeac2fb24518a0507f5
parent71da1c21ebc79f19e749344c8b4e2c13f533872e (diff)
downloadrust-aabb6043137f71c686a77bf4bda4eb37f1a9fe22.tar.gz
rust-aabb6043137f71c686a77bf4bda4eb37f1a9fe22.zip
Move "auto trait leak" impl-trait cycle dependency test to ui
-rw-r--r--src/test/ui/impl-trait/auto-trait-leak.rs (renamed from src/test/compile-fail/impl-trait/auto-trait-leak.rs)0
-rw-r--r--src/test/ui/impl-trait/auto-trait-leak.stderr70
2 files changed, 70 insertions, 0 deletions
diff --git a/src/test/compile-fail/impl-trait/auto-trait-leak.rs b/src/test/ui/impl-trait/auto-trait-leak.rs
index 8a5033e7647..8a5033e7647 100644
--- a/src/test/compile-fail/impl-trait/auto-trait-leak.rs
+++ b/src/test/ui/impl-trait/auto-trait-leak.rs
diff --git a/src/test/ui/impl-trait/auto-trait-leak.stderr b/src/test/ui/impl-trait/auto-trait-leak.stderr
new file mode 100644
index 00000000000..90476eb2d0d
--- /dev/null
+++ b/src/test/ui/impl-trait/auto-trait-leak.stderr
@@ -0,0 +1,70 @@
+error[E0277]: the trait bound `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` is not satisfied in `impl std::ops::Fn<(i32,)>`
+  --> $DIR/auto-trait-leak.rs:27:5
+   |
+27 |     send(before());
+   |     ^^^^ `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely
+   |
+   = help: within `impl std::ops::Fn<(i32,)>`, the trait `std::marker::Send` is not implemented for `std::rc::Rc<std::cell::Cell<i32>>`
+   = note: required because it appears within the type `[closure@$DIR/auto-trait-leak.rs:21:5: 21:22 p:std::rc::Rc<std::cell::Cell<i32>>]`
+   = note: required because it appears within the type `impl std::ops::Fn<(i32,)>`
+   = note: required by `send`
+
+error[E0277]: the trait bound `std::rc::Rc<std::cell::Cell<i32>>: std::marker::Send` is not satisfied in `impl std::ops::Fn<(i32,)>`
+  --> $DIR/auto-trait-leak.rs:34:5
+   |
+34 |     send(after());
+   |     ^^^^ `std::rc::Rc<std::cell::Cell<i32>>` cannot be sent between threads safely
+   |
+   = help: within `impl std::ops::Fn<(i32,)>`, the trait `std::marker::Send` is not implemented for `std::rc::Rc<std::cell::Cell<i32>>`
+   = note: required because it appears within the type `[closure@$DIR/auto-trait-leak.rs:46:5: 46:22 p:std::rc::Rc<std::cell::Cell<i32>>]`
+   = note: required because it appears within the type `impl std::ops::Fn<(i32,)>`
+   = note: required by `send`
+
+error[E0391]: unsupported cyclic reference between types/traits detected
+  --> $DIR/auto-trait-leak.rs:52:1
+   |
+52 | / fn cycle1() -> impl Clone {
+53 | |     //~^ ERROR unsupported cyclic reference between types/traits detected
+54 | |     //~| cyclic reference
+55 | |     //~| NOTE the cycle begins when processing `cycle1`...
+...  |
+60 | |     Rc::new(Cell::new(5))
+61 | | }
+   | |_^ cyclic reference
+   |
+note: the cycle begins when processing `cycle1`...
+  --> $DIR/auto-trait-leak.rs:52:1
+   |
+52 | / fn cycle1() -> impl Clone {
+53 | |     //~^ ERROR unsupported cyclic reference between types/traits detected
+54 | |     //~| cyclic reference
+55 | |     //~| NOTE the cycle begins when processing `cycle1`...
+...  |
+60 | |     Rc::new(Cell::new(5))
+61 | | }
+   | |_^
+note: ...which then requires processing `cycle2::{{impl-Trait}}`...
+  --> $DIR/auto-trait-leak.rs:63:16
+   |
+63 | fn cycle2() -> impl Clone {
+   |                ^^^^^^^^^^
+note: ...which then requires processing `cycle2`...
+  --> $DIR/auto-trait-leak.rs:63:1
+   |
+63 | / fn cycle2() -> impl Clone {
+64 | |     //~^ NOTE ...which then requires processing `cycle2::{{impl-Trait}}`...
+65 | |     //~| NOTE ...which then requires processing `cycle2`...
+66 | |     send(cycle1().clone());
+67 | |
+68 | |     Rc::new(String::from("foo"))
+69 | | }
+   | |_^
+note: ...which then requires processing `cycle1::{{impl-Trait}}`...
+  --> $DIR/auto-trait-leak.rs:52:16
+   |
+52 | fn cycle1() -> impl Clone {
+   |                ^^^^^^^^^^
+   = note: ...which then again requires processing `cycle1`, completing the cycle.
+
+error: aborting due to 3 previous errors
+