| error[E0597]: `x` does not live long enough | |
| --> $DIR/migration-note.rs:184:17 | |
| | | |
| LL | let x = vec![0]; | |
| | - binding `x` declared here | |
| LL | | |
| LL | display_len(&x) | |
| | ------------^^- | |
| | | | | |
| | | borrowed value does not live long enough | |
| | argument requires that `x` is borrowed for `'static` | |
| ... | |
| LL | } | |
| | - `x` dropped here while still borrowed | |
| error[E0502]: cannot borrow `x` as mutable because it is also borrowed as immutable | |
| --> $DIR/migration-note.rs:19:5 | |
| | | |
| LL | let a = display_len(&x); | |
| | -- immutable borrow occurs here | |
| ... | |
| LL | x.push(1); | |
| | ^^^^^^^^^ mutable borrow occurs here | |
| ... | |
| LL | println!("{a}"); | |
| | - immutable borrow later used here | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:16:13 | |
| | | |
| LL | let a = display_len(&x); | |
| | ^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len<T>(x: &Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0597]: `x` does not live long enough | |
| --> $DIR/migration-note.rs:29:25 | |
| | | |
| LL | let x = vec![1]; | |
| | - binding `x` declared here | |
| LL | | |
| LL | let a = display_len(&x); | |
| | ^^ borrowed value does not live long enough | |
| ... | |
| LL | needs_static(a); | |
| | --------------- argument requires that `x` is borrowed for `'static` | |
| LL | | |
| LL | } | |
| | - `x` dropped here while still borrowed | |
| | | |
| note: requirement that the value outlives `'static` introduced here | |
| --> $DIR/migration-note.rs:34:37 | |
| | | |
| LL | fn needs_static(_: impl Sized + 'static) {} | |
| | ^^^^^^^ | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:29:13 | |
| | | |
| LL | let a = display_len(&x); | |
| | ^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len<T>(x: &Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0505]: cannot move out of `x` because it is borrowed | |
| --> $DIR/migration-note.rs:49:8 | |
| | | |
| LL | let x = vec![1]; | |
| | - binding `x` declared here | |
| LL | | |
| LL | let a = display_len(&x); | |
| | -- borrow of `x` occurs here | |
| ... | |
| LL | mv(x); | |
| | ^ move out of `x` occurs here | |
| ... | |
| LL | } | |
| | - borrow might be used here, when `a` is dropped and runs the destructor for type `impl std::fmt::Display` | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:44:13 | |
| | | |
| LL | let a = display_len(&x); | |
| | ^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len<T>(x: &Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| help: consider cloning the value if the performance cost is acceptable | |
| | | |
| LL | let a = display_len(&x.clone()); | |
| | ++++++++ | |
| error[E0499]: cannot borrow `x` as mutable more than once at a time | |
| --> $DIR/migration-note.rs:67:5 | |
| | | |
| LL | let a = display_len_mut(&mut x); | |
| | ------ first mutable borrow occurs here | |
| ... | |
| LL | x.push(1); | |
| | ^ second mutable borrow occurs here | |
| ... | |
| LL | println!("{a}"); | |
| | - first borrow later used here | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:64:13 | |
| | | |
| LL | let a = display_len_mut(&mut x); | |
| | ^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len_mut<T>(x: &mut Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0597]: `x` does not live long enough | |
| --> $DIR/migration-note.rs:77:29 | |
| | | |
| LL | let mut x = vec![1]; | |
| | ----- binding `x` declared here | |
| LL | | |
| LL | let a = display_len_mut(&mut x); | |
| | ^^^^^^ borrowed value does not live long enough | |
| ... | |
| LL | needs_static(a); | |
| | --------------- argument requires that `x` is borrowed for `'static` | |
| LL | | |
| LL | } | |
| | - `x` dropped here while still borrowed | |
| | | |
| note: requirement that the value outlives `'static` introduced here | |
| --> $DIR/migration-note.rs:82:37 | |
| | | |
| LL | fn needs_static(_: impl Sized + 'static) {} | |
| | ^^^^^^^ | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:77:13 | |
| | | |
| LL | let a = display_len_mut(&mut x); | |
| | ^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len_mut<T>(x: &mut Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0505]: cannot move out of `x` because it is borrowed | |
| --> $DIR/migration-note.rs:97:8 | |
| | | |
| LL | let mut x = vec![1]; | |
| | ----- binding `x` declared here | |
| LL | | |
| LL | let a = display_len_mut(&mut x); | |
| | ------ borrow of `x` occurs here | |
| ... | |
| LL | mv(x); | |
| | ^ move out of `x` occurs here | |
| ... | |
| LL | } | |
| | - borrow might be used here, when `a` is dropped and runs the destructor for type `impl std::fmt::Display` | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:92:13 | |
| | | |
| LL | let a = display_len_mut(&mut x); | |
| | ^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len_mut<T>(x: &mut Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| help: consider cloning the value if the performance cost is acceptable | |
| | | |
| LL | let a = display_len_mut(&mut x.clone()); | |
| | ++++++++ | |
| error[E0506]: cannot assign to `s.f` because it is borrowed | |
| --> $DIR/migration-note.rs:117:5 | |
| | | |
| LL | let a = display_field(&s.f); | |
| | ---- `s.f` is borrowed here | |
| ... | |
| LL | s.f = 1; | |
| | ^^^^^^^ `s.f` is assigned to here but it was already borrowed | |
| ... | |
| LL | println!("{a}"); | |
| | - borrow later used here | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:114:13 | |
| | | |
| LL | let a = display_field(&s.f); | |
| | ^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_field<T: Copy + Display>(t: &T) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0506]: cannot assign to `s.f` because it is borrowed | |
| --> $DIR/migration-note.rs:133:5 | |
| | | |
| LL | let a = display_field(&mut s.f); | |
| | -------- `s.f` is borrowed here | |
| ... | |
| LL | s.f = 1; | |
| | ^^^^^^^ `s.f` is assigned to here but it was already borrowed | |
| ... | |
| LL | println!("{a}"); | |
| | - borrow later used here | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:130:13 | |
| | | |
| LL | let a = display_field(&mut s.f); | |
| | ^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_field<T: Copy + Display>(t: &T) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0503]: cannot use `s.f` because it was mutably borrowed | |
| --> $DIR/migration-note.rs:145:5 | |
| | | |
| LL | let a = display_field(&mut s.f); | |
| | -------- `s.f` is borrowed here | |
| ... | |
| LL | s.f; | |
| | ^^^ use of borrowed `s.f` | |
| ... | |
| LL | println!("{a}"); | |
| | - borrow later used here | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:142:13 | |
| | | |
| LL | let a = display_field(&mut s.f); | |
| | ^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_field<T: Copy + Display>(t: &T) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0597]: `z.f` does not live long enough | |
| --> $DIR/migration-note.rs:161:25 | |
| | | |
| LL | let z = Z { f: vec![1] }; | |
| | - binding `z` declared here | |
| LL | | |
| LL | x = display_len(&z.f); | |
| | ^^^^ borrowed value does not live long enough | |
| ... | |
| LL | } | |
| | - `z.f` dropped here while still borrowed | |
| LL | | |
| LL | } | |
| | - borrow might be used here, when `x` is dropped and runs the destructor for type `impl std::fmt::Display` | |
| | | |
| = note: values in a scope are dropped in the opposite order they are defined | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:161:13 | |
| | | |
| LL | x = display_len(&z.f); | |
| | ^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len<T>(x: &Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0716]: temporary value dropped while borrowed | |
| --> $DIR/migration-note.rs:172:40 | |
| | | |
| LL | let x = { let x = display_len(&mut vec![0]); x }; | |
| | ^^^^^^^ - - borrow later used here | |
| | | | | |
| | | temporary value is freed at the end of this statement | |
| | creates a temporary value which is freed while still in use | |
| | | |
| = note: consider using a `let` binding to create a longer lived value | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:172:23 | |
| | | |
| LL | let x = { let x = display_len(&mut vec![0]); x }; | |
| | ^^^^^^^^^^^^^^^^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL | fn display_len<T>(x: &Vec<T>) -> impl Display + use<T> { | |
| | ++++++++ | |
| error[E0505]: cannot move out of `x` because it is borrowed | |
| --> $DIR/migration-note.rs:200:10 | |
| | | |
| LL | let x = String::new(); | |
| | - binding `x` declared here | |
| LL | | |
| LL | let y = capture_apit(&x); | |
| | -- borrow of `x` occurs here | |
| ... | |
| LL | drop(x); | |
| | ^ move out of `x` occurs here | |
| ... | |
| LL | } | |
| | - borrow might be used here, when `y` is dropped and runs the destructor for type `impl Sized` | |
| | | |
| note: this call may capture more lifetimes than intended, because Rust 2024 has adjusted the `impl Trait` lifetime capture rules | |
| --> $DIR/migration-note.rs:197:13 | |
| | | |
| LL | let y = capture_apit(&x); | |
| | ^^^^^^^^^^^^^^^^ | |
| note: you could use a `use<...>` bound to explicitly specify captures, but argument-position `impl Trait`s are not nameable | |
| --> $DIR/migration-note.rs:191:21 | |
| | | |
| LL | fn capture_apit(x: &impl Sized) -> impl Sized {} | |
| | ^^^^^^^^^^ | |
| help: use the precise capturing `use<...>` syntax to make the captures explicit | |
| | | |
| LL - fn capture_apit(x: &impl Sized) -> impl Sized {} | |
| LL + fn capture_apit<T: Sized>(x: &T) -> impl Sized + use<T> {} | |
| | | |
| help: consider cloning the value if the performance cost is acceptable | |
| | | |
| LL | let y = capture_apit(&x.clone()); | |
| | ++++++++ | |
| error: aborting due to 13 previous errors | |
| Some errors have detailed explanations: E0499, E0502, E0503, E0505, E0506, E0597, E0716. | |
| For more information about an error, try `rustc --explain E0499`. |