From aabb6043137f71c686a77bf4bda4eb37f1a9fe22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Esteban=20K=C3=BCber?= Date: Sun, 26 Nov 2017 12:32:30 -0800 Subject: [PATCH] Move "auto trait leak" impl-trait cycle dependency test to ui --- .../impl-trait/auto-trait-leak.rs | 0 src/test/ui/impl-trait/auto-trait-leak.stderr | 70 +++++++++++++++++++ 2 files changed, 70 insertions(+) rename src/test/{compile-fail => ui}/impl-trait/auto-trait-leak.rs (100%) create mode 100644 src/test/ui/impl-trait/auto-trait-leak.stderr diff --git a/src/test/compile-fail/impl-trait/auto-trait-leak.rs b/src/test/ui/impl-trait/auto-trait-leak.rs similarity index 100% rename from src/test/compile-fail/impl-trait/auto-trait-leak.rs rename to 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 0000000000000..90476eb2d0d7a --- /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::marker::Send` is not satisfied in `impl std::ops::Fn<(i32,)>` + --> $DIR/auto-trait-leak.rs:27:5 + | +27 | send(before()); + | ^^^^ `std::rc::Rc>` 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>` + = note: required because it appears within the type `[closure@$DIR/auto-trait-leak.rs:21:5: 21:22 p:std::rc::Rc>]` + = 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::marker::Send` is not satisfied in `impl std::ops::Fn<(i32,)>` + --> $DIR/auto-trait-leak.rs:34:5 + | +34 | send(after()); + | ^^^^ `std::rc::Rc>` 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>` + = note: required because it appears within the type `[closure@$DIR/auto-trait-leak.rs:46:5: 46:22 p:std::rc::Rc>]` + = 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 +