2021-08-12 04:58:04 -05:00
|
|
|
// run-rustfix
|
|
|
|
|
|
|
|
// See https://github.com/rust-lang/rust/issues/87955
|
|
|
|
|
|
|
|
#![deny(rust_2021_incompatible_closure_captures)]
|
|
|
|
//~^ NOTE: the lint level is defined here
|
|
|
|
|
2021-09-21 03:05:11 -05:00
|
|
|
|
|
|
|
#[derive(Debug)]
|
|
|
|
struct Foo(i32);
|
|
|
|
impl Drop for Foo {
|
|
|
|
fn drop(&mut self) {
|
|
|
|
println!("{:?} dropped", self.0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-08-12 04:58:04 -05:00
|
|
|
fn main() {
|
2021-09-21 03:05:11 -05:00
|
|
|
let a = (Foo(0), Foo(1));
|
2021-08-12 04:58:04 -05:00
|
|
|
let _ = || { let _ = &a; dbg!(a.0) };
|
|
|
|
//~^ ERROR: drop order
|
2021-08-12 14:13:00 -05:00
|
|
|
//~| NOTE: will only capture `a.0`
|
2021-08-12 04:58:04 -05:00
|
|
|
//~| NOTE: for more information, see
|
|
|
|
//~| HELP: add a dummy let to cause `a` to be fully captured
|
|
|
|
}
|
|
|
|
//~^ NOTE: dropped here
|