1 error[E0391]: cycle detected when computing type of `cycle1::{opaque#0}`
2 --> $DIR/auto-trait-leak.rs:12:16
4 LL | fn cycle1() -> impl Clone {
7 note: ...which requires borrow-checking `cycle1`...
8 --> $DIR/auto-trait-leak.rs:12:1
10 LL | fn cycle1() -> impl Clone {
11 | ^^^^^^^^^^^^^^^^^^^^^^^^^
12 note: ...which requires processing `cycle1`...
13 --> $DIR/auto-trait-leak.rs:12:1
15 LL | fn cycle1() -> impl Clone {
16 | ^^^^^^^^^^^^^^^^^^^^^^^^^
17 note: ...which requires processing MIR for `cycle1`...
18 --> $DIR/auto-trait-leak.rs:12:1
20 LL | fn cycle1() -> impl Clone {
21 | ^^^^^^^^^^^^^^^^^^^^^^^^^
22 note: ...which requires unsafety-checking `cycle1`...
23 --> $DIR/auto-trait-leak.rs:12:1
25 LL | fn cycle1() -> impl Clone {
26 | ^^^^^^^^^^^^^^^^^^^^^^^^^
27 note: ...which requires building MIR for `cycle1`...
28 --> $DIR/auto-trait-leak.rs:12:1
30 LL | fn cycle1() -> impl Clone {
31 | ^^^^^^^^^^^^^^^^^^^^^^^^^
32 note: ...which requires type-checking `cycle1`...
33 --> $DIR/auto-trait-leak.rs:12:1
35 LL | fn cycle1() -> impl Clone {
36 | ^^^^^^^^^^^^^^^^^^^^^^^^^
37 = note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
38 note: ...which requires computing type of `cycle2::{opaque#0}`...
39 --> $DIR/auto-trait-leak.rs:20:16
41 LL | fn cycle2() -> impl Clone {
43 note: ...which requires borrow-checking `cycle2`...
44 --> $DIR/auto-trait-leak.rs:20:1
46 LL | fn cycle2() -> impl Clone {
47 | ^^^^^^^^^^^^^^^^^^^^^^^^^
48 note: ...which requires processing `cycle2`...
49 --> $DIR/auto-trait-leak.rs:20:1
51 LL | fn cycle2() -> impl Clone {
52 | ^^^^^^^^^^^^^^^^^^^^^^^^^
53 note: ...which requires processing MIR for `cycle2`...
54 --> $DIR/auto-trait-leak.rs:20:1
56 LL | fn cycle2() -> impl Clone {
57 | ^^^^^^^^^^^^^^^^^^^^^^^^^
58 note: ...which requires unsafety-checking `cycle2`...
59 --> $DIR/auto-trait-leak.rs:20:1
61 LL | fn cycle2() -> impl Clone {
62 | ^^^^^^^^^^^^^^^^^^^^^^^^^
63 note: ...which requires building MIR for `cycle2`...
64 --> $DIR/auto-trait-leak.rs:20:1
66 LL | fn cycle2() -> impl Clone {
67 | ^^^^^^^^^^^^^^^^^^^^^^^^^
68 note: ...which requires type-checking `cycle2`...
69 --> $DIR/auto-trait-leak.rs:20:1
71 LL | fn cycle2() -> impl Clone {
72 | ^^^^^^^^^^^^^^^^^^^^^^^^^
73 = note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
74 = note: ...which again requires computing type of `cycle1::{opaque#0}`, completing the cycle
75 note: cycle used when checking item types in top-level module
76 --> $DIR/auto-trait-leak.rs:1:1
78 LL | / use std::cell::Cell;
79 LL | | use std::rc::Rc;
81 LL | | fn send<T: Send>(_: T) {}
83 LL | | Rc::new(String::from("foo"))
87 error[E0277]: `Rc<String>` cannot be sent between threads safely
88 --> $DIR/auto-trait-leak.rs:14:5
90 LL | fn send<T: Send>(_: T) {}
91 | ---- required by this bound in `send`
93 LL | send(cycle2().clone());
94 | ^^^^ `Rc<String>` cannot be sent between threads safely
96 LL | fn cycle2() -> impl Clone {
97 | ---------- within this `impl Clone`
99 = help: within `impl Clone`, the trait `Send` is not implemented for `Rc<String>`
100 = note: required because it appears within the type `impl Clone`
102 error: aborting due to 2 previous errors
104 Some errors have detailed explanations: E0277, E0391.
105 For more information about an error, try `rustc --explain E0277`.