36 lines
881 B
Rust
36 lines
881 B
Rust
|
//@ run-rustfix
|
||
|
|
||
|
#![deny(rust_2021_incompatible_closure_captures)]
|
||
|
//~^ NOTE lint level is defined here
|
||
|
|
||
|
fn main() {
|
||
|
struct Foo(u32);
|
||
|
impl Drop for Foo {
|
||
|
fn drop(&mut self) {
|
||
|
println!("dropped {}", self.0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
let f0 = Foo(0);
|
||
|
let f1 = Foo(1);
|
||
|
|
||
|
let c0 = move || {
|
||
|
let _ = &f0;
|
||
|
//~^ ERROR changes to closure capture in Rust 2021 will affect drop order
|
||
|
//~| NOTE for more information
|
||
|
let _ = f0;
|
||
|
//~^ NOTE in Rust 2018, this causes the closure to capture `f0`, but in Rust 2021, it has no effect
|
||
|
};
|
||
|
|
||
|
let c1 = move || {
|
||
|
let _ = &f1;
|
||
|
};
|
||
|
|
||
|
println!("dropping 0");
|
||
|
drop(c0);
|
||
|
println!("dropping 1");
|
||
|
drop(c1);
|
||
|
println!("dropped all");
|
||
|
}
|
||
|
//~^ NOTE in Rust 2018, `f0` is dropped here along with the closure, but in Rust 2021 `f0` is not part of the closure
|