diff options
Diffstat (limited to 'tests/ui/impl-trait/auto-trait-leak.rs')
| -rw-r--r-- | tests/ui/impl-trait/auto-trait-leak.rs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/tests/ui/impl-trait/auto-trait-leak.rs b/tests/ui/impl-trait/auto-trait-leak.rs new file mode 100644 index 00000000000..c2fbbf94fd6 --- /dev/null +++ b/tests/ui/impl-trait/auto-trait-leak.rs @@ -0,0 +1,23 @@ +use std::cell::Cell; +use std::rc::Rc; + +fn send<T: Send>(_: T) {} + +fn main() { +} + +// Cycles should work as the deferred obligations are +// independently resolved and only require the concrete +// return type, which can't depend on the obligation. +fn cycle1() -> impl Clone { + //~^ ERROR cycle detected + send(cycle2().clone()); + + Rc::new(Cell::new(5)) +} + +fn cycle2() -> impl Clone { + send(cycle1().clone()); + + Rc::new(String::from("foo")) +} |
