diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:58 +0000 |
commit | a4b7ed7a42c716ab9f05e351f003d589124fd55d (patch) | |
tree | b620cd3f223850b28716e474e80c58059dca5dd4 /src/test/ui/closures/2229_closure_analysis/diagnostics | |
parent | Adding upstream version 1.67.1+dfsg1. (diff) | |
download | rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.tar.xz rustc-a4b7ed7a42c716ab9f05e351f003d589124fd55d.zip |
Adding upstream version 1.68.2+dfsg1.upstream/1.68.2+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/test/ui/closures/2229_closure_analysis/diagnostics')
44 files changed, 0 insertions, 1311 deletions
diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.rs deleted file mode 100644 index f97e60daf..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.rs +++ /dev/null @@ -1,85 +0,0 @@ -// edition:2021 - -// Test that arrays are completely captured by closures by relying on the borrow check diagnostics - -fn arrays_1() { - let mut arr = [1, 2, 3, 4, 5]; - - let mut c = || { - arr[0] += 10; - }; - - // c will capture `arr` completely, therefore another index into the - // array can't be modified here - arr[1] += 10; - //~^ ERROR: cannot use `arr` because it was mutably borrowed - //~| ERROR: cannot use `arr[_]` because it was mutably borrowed - c(); -} - -fn arrays_2() { - let mut arr = [1, 2, 3, 4, 5]; - - let c = || { - println!("{:#?}", &arr[3..4]); - }; - - // c will capture `arr` completely, therefore another index into the - // array can't be modified here - arr[1] += 10; - //~^ ERROR: cannot assign to `arr[_]` because it is borrowed - c(); -} - -fn arrays_3() { - let mut arr = [1, 2, 3, 4, 5]; - - let c = || { - println!("{}", arr[3]); - }; - - // c will capture `arr` completely, therefore another index into the - // array can't be modified here - arr[1] += 10; - //~^ ERROR: cannot assign to `arr[_]` because it is borrowed - c(); -} - -fn arrays_4() { - let mut arr = [1, 2, 3, 4, 5]; - - let mut c = || { - arr[1] += 10; - }; - - // c will capture `arr` completely, therefore we cannot borrow another index - // into the array. - println!("{}", arr[3]); - //~^ ERROR: cannot use `arr` because it was mutably borrowed - //~| ERROR: cannot borrow `arr[_]` as immutable because it is also borrowed as mutable - - c(); -} - -fn arrays_5() { - let mut arr = [1, 2, 3, 4, 5]; - - let mut c = || { - arr[1] += 10; - }; - - // c will capture `arr` completely, therefore we cannot borrow other indices - // into the array. - println!("{:#?}", &arr[3..2]); - //~^ ERROR: cannot borrow `arr` as immutable because it is also borrowed as mutable - - c(); -} - -fn main() { - arrays_1(); - arrays_2(); - arrays_3(); - arrays_4(); - arrays_5(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.stderr deleted file mode 100644 index 4f41060dc..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/arrays.stderr +++ /dev/null @@ -1,104 +0,0 @@ -error[E0503]: cannot use `arr` because it was mutably borrowed - --> $DIR/arrays.rs:14:5 - | -LL | let mut c = || { - | -- borrow of `arr` occurs here -LL | arr[0] += 10; - | --- borrow occurs due to use of `arr` in closure -... -LL | arr[1] += 10; - | ^^^^^^ use of borrowed `arr` -... -LL | c(); - | - borrow later used here - -error[E0503]: cannot use `arr[_]` because it was mutably borrowed - --> $DIR/arrays.rs:14:5 - | -LL | let mut c = || { - | -- borrow of `arr` occurs here -LL | arr[0] += 10; - | --- borrow occurs due to use of `arr` in closure -... -LL | arr[1] += 10; - | ^^^^^^^^^^^^ use of borrowed `arr` -... -LL | c(); - | - borrow later used here - -error[E0506]: cannot assign to `arr[_]` because it is borrowed - --> $DIR/arrays.rs:29:5 - | -LL | let c = || { - | -- borrow of `arr[_]` occurs here -LL | println!("{:#?}", &arr[3..4]); - | --- borrow occurs due to use in closure -... -LL | arr[1] += 10; - | ^^^^^^^^^^^^ assignment to borrowed `arr[_]` occurs here -LL | -LL | c(); - | - borrow later used here - -error[E0506]: cannot assign to `arr[_]` because it is borrowed - --> $DIR/arrays.rs:43:5 - | -LL | let c = || { - | -- borrow of `arr[_]` occurs here -LL | println!("{}", arr[3]); - | --- borrow occurs due to use in closure -... -LL | arr[1] += 10; - | ^^^^^^^^^^^^ assignment to borrowed `arr[_]` occurs here -LL | -LL | c(); - | - borrow later used here - -error[E0503]: cannot use `arr` because it was mutably borrowed - --> $DIR/arrays.rs:57:20 - | -LL | let mut c = || { - | -- borrow of `arr` occurs here -LL | arr[1] += 10; - | --- borrow occurs due to use of `arr` in closure -... -LL | println!("{}", arr[3]); - | ^^^^^^ use of borrowed `arr` -... -LL | c(); - | - borrow later used here - -error[E0502]: cannot borrow `arr[_]` as immutable because it is also borrowed as mutable - --> $DIR/arrays.rs:57:20 - | -LL | let mut c = || { - | -- mutable borrow occurs here -LL | arr[1] += 10; - | --- first borrow occurs due to use of `arr` in closure -... -LL | println!("{}", arr[3]); - | ^^^^^^ immutable borrow occurs here -... -LL | c(); - | - mutable borrow later used here - | - = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) - -error[E0502]: cannot borrow `arr` as immutable because it is also borrowed as mutable - --> $DIR/arrays.rs:73:24 - | -LL | let mut c = || { - | -- mutable borrow occurs here -LL | arr[1] += 10; - | --- first borrow occurs due to use of `arr` in closure -... -LL | println!("{:#?}", &arr[3..2]); - | ^^^ immutable borrow occurs here -... -LL | c(); - | - mutable borrow later used here - -error: aborting due to 7 previous errors - -Some errors have detailed explanations: E0502, E0503, E0506. -For more information about an error, try `rustc --explain E0502`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.rs deleted file mode 100644 index 3664d76c2..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.rs +++ /dev/null @@ -1,19 +0,0 @@ -// edition:2021 - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} -fn main() { - let mut p = Point {x: 1, y: 2 }; - - let y = &mut p.y; - let mut c = || { - //~^ ERROR cannot borrow `p` as mutable more than once at a time - let x = &mut p.x; - println!("{:?}", p); - }; - c(); - *y+=1; -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.stderr deleted file mode 100644 index 341d2bc65..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-1.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0499]: cannot borrow `p` as mutable more than once at a time - --> $DIR/borrowck-1.rs:12:17 - | -LL | let y = &mut p.y; - | -------- first mutable borrow occurs here -LL | let mut c = || { - | ^^ second mutable borrow occurs here -LL | -LL | let x = &mut p.x; - | --- capture is mutable because of use here -LL | println!("{:?}", p); - | - second borrow occurs due to use of `p` in closure -... -LL | *y+=1; - | ----- first borrow later used here - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0499`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.rs deleted file mode 100644 index ae416bab6..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.rs +++ /dev/null @@ -1,19 +0,0 @@ -// edition:2021 - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} -fn main() { - let mut p = Point {x: 1, y: 2 }; - - let y = &p.y; - let mut c = || { - //~^ ERROR cannot borrow `p` as mutable because it is also borrowed as immutable - println!("{:?}", p); - let x = &mut p.x; - }; - c(); - println!("{}", y); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.stderr deleted file mode 100644 index 584bb862b..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-2.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0502]: cannot borrow `p` as mutable because it is also borrowed as immutable - --> $DIR/borrowck-2.rs:12:17 - | -LL | let y = &p.y; - | ---- immutable borrow occurs here -LL | let mut c = || { - | ^^ mutable borrow occurs here -LL | -LL | println!("{:?}", p); - | - second borrow occurs due to use of `p` in closure -LL | let x = &mut p.x; - | --- capture is mutable because of use here -... -LL | println!("{}", y); - | - immutable borrow later used here - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0502`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.rs deleted file mode 100644 index bdd6cb79b..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.rs +++ /dev/null @@ -1,18 +0,0 @@ -// edition:2021 - -#[derive(Debug)] -struct Point { - x: String, - y: String, -} -fn main() { - let mut c = { - let mut p = Point {x: "1".to_string(), y: "2".to_string() }; - || { - let x = &mut p.x; - println!("{:?}", p); - //~^ ERROR `p` does not live long enough - } - }; - c(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.stderr deleted file mode 100644 index dab1809a3..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-3.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error[E0597]: `p` does not live long enough - --> $DIR/borrowck-3.rs:13:29 - | -LL | let mut c = { - | ----- borrow later stored here -LL | let mut p = Point {x: "1".to_string(), y: "2".to_string() }; -LL | || { - | -- value captured here -LL | let x = &mut p.x; -LL | println!("{:?}", p); - | ^ borrowed value does not live long enough -... -LL | }; - | - `p` dropped here while still borrowed - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0597`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.rs deleted file mode 100644 index a2290d850..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.rs +++ /dev/null @@ -1,20 +0,0 @@ -// edition:2021 - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} -fn foo () -> impl FnMut()->() { - let mut p = Point {x: 1, y: 2 }; - let mut c = || { - //~^ ERROR closure may outlive the current function, but it borrows `p` - p.x+=5; - println!("{:?}", p); - }; - c -} -fn main() { - let c = foo(); - c(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.stderr deleted file mode 100644 index 46379a381..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-4.stderr +++ /dev/null @@ -1,22 +0,0 @@ -error[E0373]: closure may outlive the current function, but it borrows `p`, which is owned by the current function - --> $DIR/borrowck-4.rs:10:17 - | -LL | let mut c = || { - | ^^ may outlive borrowed value `p` -... -LL | println!("{:?}", p); - | - `p` is borrowed here - | -note: closure is returned here - --> $DIR/borrowck-4.rs:15:5 - | -LL | c - | ^ -help: to force the closure to take ownership of `p` (and any other referenced variables), use the `move` keyword - | -LL | let mut c = move || { - | ++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0373`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.rs deleted file mode 100644 index 5ff7b1242..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.rs +++ /dev/null @@ -1,26 +0,0 @@ -// edition:2021 - - - -// Tests that two closures cannot simultaneously have mutable -// and immutable access to the variable. Issue #6801. - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} - -fn a() { - let mut p = Point {x: 3, y:4}; - let c2 = || p.y * 5; - let c1 = || { - //~^ ERROR cannot borrow `p` as mutable because it is also borrowed as immutable - dbg!(&p); - p.x = 4; - }; - drop(c2); -} - -fn main() { -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.stderr deleted file mode 100644 index 5f1dae297..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/borrowck/borrowck-closures-mut-and-imm.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0502]: cannot borrow `p` as mutable because it is also borrowed as immutable - --> $DIR/borrowck-closures-mut-and-imm.rs:17:14 - | -LL | let c2 = || p.y * 5; - | -- --- first borrow occurs due to use of `p.y` in closure - | | - | immutable borrow occurs here -LL | let c1 = || { - | ^^ mutable borrow occurs here -LL | -LL | dbg!(&p); - | - second borrow occurs due to use of `p` in closure -LL | p.x = 4; - | --- capture is mutable because of use here -LL | }; -LL | drop(c2); - | -- immutable borrow later used here - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0502`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/box.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/box.rs deleted file mode 100644 index a110fa4e2..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/box.rs +++ /dev/null @@ -1,64 +0,0 @@ -// edition:2021 - -// Test borrow checker when we precise capture when using boxes - -struct MetaData { x: String, name: String } -struct Data { m: MetaData } -struct BoxedData(Box<Data>); -struct EvenMoreBoxedData(Box<BoxedData>); - -// Check diagnostics when the same path is mutated both inside and outside the closure -fn box_1() { - let m = MetaData { x: format!("x"), name: format!("name") }; - let d = Data { m }; - let b = BoxedData(Box::new(d)); - let mut e = EvenMoreBoxedData(Box::new(b)); - - let mut c = || { - e.0.0.m.x = format!("not-x"); - }; - - e.0.0.m.x = format!("not-x"); - //~^ ERROR: cannot assign to `e.0.0.m.x` because it is borrowed - c(); -} - -// Check diagnostics when a path is mutated inside a closure while attempting to read it outside -// the closure. -fn box_2() { - let m = MetaData { x: format!("x"), name: format!("name") }; - let d = Data { m }; - let b = BoxedData(Box::new(d)); - let mut e = EvenMoreBoxedData(Box::new(b)); - - let mut c = || { - e.0.0.m.x = format!("not-x"); - }; - - println!("{}", e.0.0.m.x); - //~^ ERROR: cannot borrow `e.0.0.m.x` as immutable because it is also borrowed as mutable - c(); -} - -// Check diagnostics when a path is read inside a closure while attempting to mutate it outside -// the closure. -fn box_3() { - let m = MetaData { x: format!("x"), name: format!("name") }; - let d = Data { m }; - let b = BoxedData(Box::new(d)); - let mut e = EvenMoreBoxedData(Box::new(b)); - - let c = || { - println!("{}", e.0.0.m.x); - }; - - e.0.0.m.x = format!("not-x"); - //~^ ERROR: cannot assign to `e.0.0.m.x` because it is borrowed - c(); -} - -fn main() { - box_1(); - box_2(); - box_3(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/box.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/box.stderr deleted file mode 100644 index f8b178752..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/box.stderr +++ /dev/null @@ -1,48 +0,0 @@ -error[E0506]: cannot assign to `e.0.0.m.x` because it is borrowed - --> $DIR/box.rs:21:5 - | -LL | let mut c = || { - | -- borrow of `e.0.0.m.x` occurs here -LL | e.0.0.m.x = format!("not-x"); - | --------- borrow occurs due to use in closure -... -LL | e.0.0.m.x = format!("not-x"); - | ^^^^^^^^^ assignment to borrowed `e.0.0.m.x` occurs here -LL | -LL | c(); - | - borrow later used here - -error[E0502]: cannot borrow `e.0.0.m.x` as immutable because it is also borrowed as mutable - --> $DIR/box.rs:38:20 - | -LL | let mut c = || { - | -- mutable borrow occurs here -LL | e.0.0.m.x = format!("not-x"); - | --------- first borrow occurs due to use of `e.0.0.m.x` in closure -... -LL | println!("{}", e.0.0.m.x); - | ^^^^^^^^^ immutable borrow occurs here -LL | -LL | c(); - | - mutable borrow later used here - | - = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) - -error[E0506]: cannot assign to `e.0.0.m.x` because it is borrowed - --> $DIR/box.rs:55:5 - | -LL | let c = || { - | -- borrow of `e.0.0.m.x` occurs here -LL | println!("{}", e.0.0.m.x); - | --------- borrow occurs due to use in closure -... -LL | e.0.0.m.x = format!("not-x"); - | ^^^^^^^^^ assignment to borrowed `e.0.0.m.x` occurs here -LL | -LL | c(); - | - borrow later used here - -error: aborting due to 3 previous errors - -Some errors have detailed explanations: E0502, E0506. -For more information about an error, try `rustc --explain E0502`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.rs deleted file mode 100644 index 77effcb00..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.rs +++ /dev/null @@ -1,19 +0,0 @@ -// edition:2021 - -// Test that if we deref an immutable borrow to access a Place, -// then we can't mutate the final place. - -fn main() { - let mut x = (format!(""), format!("X2")); - let mut y = (&x, "Y"); - let z = (&mut y, "Z"); - - // `x.0` is mutable but we access `x` via `*z.0.0`, which is an immutable reference and - // therefore can't be mutated. - let mut c = || { - //~^ ERROR: cannot borrow `*z.0.0` as mutable, as it is behind a `&` reference - z.0.0.0 = format!("X1"); - }; - - c(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.stderr deleted file mode 100644 index 38c530b80..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm-borrow.stderr +++ /dev/null @@ -1,12 +0,0 @@ -error[E0596]: cannot borrow `*z.0.0` as mutable, as it is behind a `&` reference - --> $DIR/cant-mutate-imm-borrow.rs:13:17 - | -LL | let mut c = || { - | ^^ cannot borrow as mutable -LL | -LL | z.0.0.0 = format!("X1"); - | ------- mutable borrow occurs due to use of `*z.0.0` in closure - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.rs deleted file mode 100644 index 25ee9a149..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.rs +++ /dev/null @@ -1,34 +0,0 @@ -// edition:2021 - -// Ensure that diagnostics for mutability error (because the root variable -// isn't mutable) work with `capture_disjoint_fields` enabled. - -fn mut_error_struct() { - let x = (10, 10); - let y = (x, 10); - let z = (y, 10); - - let mut c = || { - z.0.0.0 = 20; - //~^ ERROR: cannot assign to `z.0.0.0`, as it is not declared as mutable - }; - - c(); -} - -fn mut_error_box() { - let x = (10, 10); - let bx = Box::new(x); - - let mut c = || { - bx.0 = 20; - //~^ ERROR: cannot assign to `*bx.0`, as it is not declared as mutable - }; - - c(); -} - -fn main() { - mut_error_struct(); - mut_error_box(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.stderr deleted file mode 100644 index 98414fa8a..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/cant-mutate-imm.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0594]: cannot assign to `z.0.0.0`, as it is not declared as mutable - --> $DIR/cant-mutate-imm.rs:12:9 - | -LL | let z = (y, 10); - | - help: consider changing this to be mutable: `mut z` -... -LL | z.0.0.0 = 20; - | ^^^^^^^^^^^^ cannot assign - -error[E0594]: cannot assign to `*bx.0`, as it is not declared as mutable - --> $DIR/cant-mutate-imm.rs:24:9 - | -LL | let bx = Box::new(x); - | -- help: consider changing this to be mutable: `mut bx` -... -LL | bx.0 = 20; - | ^^^^^^^^^ cannot assign - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0594`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.rs deleted file mode 100644 index f3be542e4..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.rs +++ /dev/null @@ -1,13 +0,0 @@ -// edition:2021 - -// Test that array access is not stored as part of closure kind origin - -fn expect_fn<F: Fn()>(_f: F) {} - -fn main() { - let s = [format!("s"), format!("s")]; - let c = || { //~ ERROR expected a closure that implements the `Fn` - let [_, _s] = s; - }; - expect_fn(c); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.stderr deleted file mode 100644 index 309c63e52..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-array-diagnostics.stderr +++ /dev/null @@ -1,22 +0,0 @@ -error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnOnce` - --> $DIR/closure-origin-array-diagnostics.rs:9:13 - | -LL | let c = || { - | ^^ this closure implements `FnOnce`, not `Fn` -LL | let [_, _s] = s; - | - closure is `FnOnce` because it moves the variable `s` out of its environment -LL | }; -LL | expect_fn(c); - | --------- - the requirement to implement `Fn` derives from here - | | - | required by a bound introduced by this call - | -note: required by a bound in `expect_fn` - --> $DIR/closure-origin-array-diagnostics.rs:5:17 - | -LL | fn expect_fn<F: Fn()>(_f: F) {} - | ^^^^ required by this bound in `expect_fn` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0525`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.rs deleted file mode 100644 index aa85b55b1..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.rs +++ /dev/null @@ -1,27 +0,0 @@ -// edition:2021 - -// Check that precise paths are being reported back in the error message. - -enum MultiVariant { - Point(i32, i32), - Meta(i32) -} - -fn main() { - let mut point = MultiVariant::Point(10, -10,); - - let mut meta = MultiVariant::Meta(1); - - let c = || { - if let MultiVariant::Point(ref mut x, _) = point { - *x += 1; - } - - if let MultiVariant::Meta(ref mut v) = meta { - *v += 1; - } - }; - - let a = c; - let b = c; //~ ERROR use of moved value: `c` [E0382] -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.stderr deleted file mode 100644 index 83d282aad..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-multi-variant-diagnostics.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0382]: use of moved value: `c` - --> $DIR/closure-origin-multi-variant-diagnostics.rs:26:13 - | -LL | let a = c; - | - value moved here -LL | let b = c; - | ^ value used here after move - | -note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `point.0` out of its environment - --> $DIR/closure-origin-multi-variant-diagnostics.rs:16:52 - | -LL | if let MultiVariant::Point(ref mut x, _) = point { - | ^^^^^ -help: consider mutably borrowing `c` - | -LL | let a = &mut c; - | ++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.rs deleted file mode 100644 index bedb103cc..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.rs +++ /dev/null @@ -1,18 +0,0 @@ -// edition:2021 - - -enum SingleVariant { - Point(i32, i32), -} - -fn main() { - let mut point = SingleVariant::Point(10, -10); - - let c = || { - let SingleVariant::Point(ref mut x, _) = point; - *x += 1; - }; - - let b = c; - let a = c; //~ ERROR use of moved value: `c` [E0382] -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.stderr deleted file mode 100644 index 46323b752..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-single-variant-diagnostics.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0382]: use of moved value: `c` - --> $DIR/closure-origin-single-variant-diagnostics.rs:17:13 - | -LL | let b = c; - | - value moved here -LL | let a = c; - | ^ value used here after move - | -note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `point.0` out of its environment - --> $DIR/closure-origin-single-variant-diagnostics.rs:12:50 - | -LL | let SingleVariant::Point(ref mut x, _) = point; - | ^^^^^ -help: consider mutably borrowing `c` - | -LL | let b = &mut c; - | ++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.rs deleted file mode 100644 index 3277a83c4..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.rs +++ /dev/null @@ -1,22 +0,0 @@ -// edition:2021 - -// Check that precise paths are being reported back in the error message. - -struct Y { - y: X -} - -struct X { - a: u32, - b: u32, -} - -fn main() { - let mut x = Y { y: X { a: 5, b: 0 } }; - let hello = || { - x.y.a += 1; - }; - - let b = hello; - let c = hello; //~ ERROR use of moved value: `hello` [E0382] -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.stderr deleted file mode 100644 index 25029cc7b..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-struct-diagnostics.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0382]: use of moved value: `hello` - --> $DIR/closure-origin-struct-diagnostics.rs:21:13 - | -LL | let b = hello; - | ----- value moved here -LL | let c = hello; - | ^^^^^ value used here after move - | -note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `x.y.a` out of its environment - --> $DIR/closure-origin-struct-diagnostics.rs:17:9 - | -LL | x.y.a += 1; - | ^^^^^ -help: consider mutably borrowing `hello` - | -LL | let b = &mut hello; - | ++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.rs deleted file mode 100644 index dc3a57ae7..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.rs +++ /dev/null @@ -1,13 +0,0 @@ -// edition:2021 - -// Check that precise paths are being reported back in the error message. - -fn main() { - let mut x = (5, 0); - let hello = || { - x.0 += 1; - }; - - let b = hello; - let c = hello; //~ ERROR use of moved value: `hello` [E0382] -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.stderr deleted file mode 100644 index 06ef7baf9..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics-1.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0382]: use of moved value: `hello` - --> $DIR/closure-origin-tuple-diagnostics-1.rs:12:13 - | -LL | let b = hello; - | ----- value moved here -LL | let c = hello; - | ^^^^^ value used here after move - | -note: closure cannot be moved more than once as it is not `Copy` due to moving the variable `x.0` out of its environment - --> $DIR/closure-origin-tuple-diagnostics-1.rs:8:9 - | -LL | x.0 += 1; - | ^^^ -help: consider mutably borrowing `hello` - | -LL | let b = &mut hello; - | ++++ - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0382`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.rs deleted file mode 100644 index fa1328013..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.rs +++ /dev/null @@ -1,13 +0,0 @@ -// edition:2021 - -struct S(String, String); - -fn expect_fn<F: Fn()>(_f: F) {} - -fn main() { - let s = S(format!("s"), format!("s")); - let c = || { //~ ERROR expected a closure that implements the `Fn` - let s = s.1; - }; - expect_fn(c); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.stderr deleted file mode 100644 index 3e77635f9..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/closure-origin-tuple-diagnostics.stderr +++ /dev/null @@ -1,22 +0,0 @@ -error[E0525]: expected a closure that implements the `Fn` trait, but this closure only implements `FnOnce` - --> $DIR/closure-origin-tuple-diagnostics.rs:9:13 - | -LL | let c = || { - | ^^ this closure implements `FnOnce`, not `Fn` -LL | let s = s.1; - | --- closure is `FnOnce` because it moves the variable `s.1` out of its environment -LL | }; -LL | expect_fn(c); - | --------- - the requirement to implement `Fn` derives from here - | | - | required by a bound introduced by this call - | -note: required by a bound in `expect_fn` - --> $DIR/closure-origin-tuple-diagnostics.rs:5:17 - | -LL | fn expect_fn<F: Fn()>(_f: F) {} - | ^^^^ required by this bound in `expect_fn` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0525`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.rs deleted file mode 100644 index 3399bc001..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.rs +++ /dev/null @@ -1,92 +0,0 @@ -// edition:2021 - -// check-pass -#![allow(unreachable_code)] -#![warn(unused)] -#![allow(dead_code)] - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} - -pub fn f() { - let mut a = 1; - let mut c = Point{ x:1, y:0 }; - - // Captured by value, but variable is dead on entry. - (move || { - // This will not trigger a warning for unused variable as - // c.x will be treated as a Non-tracked place - c.x = 1; - println!("{}", c.x); - a = 1; //~ WARN value captured by `a` is never read - println!("{}", a); - })(); - - // Read and written to, but never actually used. - (move || { - // This will not trigger a warning for unused variable as - // c.x will be treated as a Non-tracked place - c.x += 1; - a += 1; //~ WARN unused variable: `a` - })(); - - (move || { - println!("{}", c.x); - // Value is read by closure itself on later invocations. - // This will not trigger a warning for unused variable as - // c.x will be treated as a Non-tracked place - c.x += 1; - println!("{}", a); - a += 1; - })(); - let b = Box::new(42); - (move || { - println!("{}", c.x); - // Never read because this is FnOnce closure. - // This will not trigger a warning for unused variable as - // c.x will be treated as a Non-tracked place - c.x += 1; - println!("{}", a); - a += 1; //~ WARN value assigned to `a` is never read - drop(b); - })(); -} - -#[derive(Debug)] -struct MyStruct<'a> { - x: Option<& 'a str>, - y: i32, -} - -pub fn nested() { - let mut a : Option<& str>; - a = None; - let mut b : Option<& str>; - b = None; - let mut d = MyStruct{ x: None, y: 1}; - let mut e = MyStruct{ x: None, y: 1}; - (|| { - (|| { - // This will not trigger a warning for unused variable as - // d.x will be treated as a Non-tracked place - d.x = Some("d1"); - d.x = Some("d2"); - a = Some("d1"); //~ WARN value assigned to `a` is never read - a = Some("d2"); - })(); - (move || { - // This will not trigger a warning for unused variable as - //e.x will be treated as a Non-tracked place - e.x = Some("e1"); - e.x = Some("e2"); - b = Some("e1"); //~ WARN value assigned to `b` is never read - //~| WARN unused variable: `b` - b = Some("e2"); //~ WARN value assigned to `b` is never read - })(); - })(); -} - -fn main() {} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.stderr deleted file mode 100644 index cf414adc0..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness.stderr +++ /dev/null @@ -1,65 +0,0 @@ -warning: value captured by `a` is never read - --> $DIR/liveness.rs:24:9 - | -LL | a = 1; - | ^ - | - = help: did you mean to capture by reference instead? -note: the lint level is defined here - --> $DIR/liveness.rs:5:9 - | -LL | #![warn(unused)] - | ^^^^^^ - = note: `#[warn(unused_assignments)]` implied by `#[warn(unused)]` - -warning: unused variable: `a` - --> $DIR/liveness.rs:33:9 - | -LL | a += 1; - | ^ - | - = help: did you mean to capture by reference instead? - = note: `#[warn(unused_variables)]` implied by `#[warn(unused)]` - -warning: value assigned to `a` is never read - --> $DIR/liveness.rs:53:9 - | -LL | a += 1; - | ^ - | - = help: maybe it is overwritten before being read? - -warning: value assigned to `a` is never read - --> $DIR/liveness.rs:77:13 - | -LL | a = Some("d1"); - | ^ - | - = help: maybe it is overwritten before being read? - -warning: value assigned to `b` is never read - --> $DIR/liveness.rs:85:13 - | -LL | b = Some("e1"); - | ^ - | - = help: maybe it is overwritten before being read? - -warning: value assigned to `b` is never read - --> $DIR/liveness.rs:87:13 - | -LL | b = Some("e2"); - | ^ - | - = help: maybe it is overwritten before being read? - -warning: unused variable: `b` - --> $DIR/liveness.rs:85:13 - | -LL | b = Some("e1"); - | ^ - | - = help: did you mean to capture by reference instead? - -warning: 7 warnings emitted - diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.rs deleted file mode 100644 index 465c9476b..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.rs +++ /dev/null @@ -1,43 +0,0 @@ -// edition:2021 - -// check-pass -#![warn(unused)] -#![allow(dead_code)] - -#[derive(Debug)] -struct MyStruct { - a: i32, - b: i32, -} - -pub fn unintentional_copy_one() { - let mut a = 1; - let mut last = MyStruct{ a: 1, b: 1}; - let mut f = move |s| { - // This will not trigger a warning for unused variable - // as last.a will be treated as a Non-tracked place - last.a = s; - a = s; - //~^ WARN value assigned to `a` is never read - //~| WARN unused variable: `a` - }; - f(2); - f(3); - f(4); -} - -pub fn unintentional_copy_two() { - let mut a = 1; - let mut sum = MyStruct{ a: 1, b: 0}; - (1..10).for_each(move |x| { - // This will not trigger a warning for unused variable - // as sum.b will be treated as a Non-tracked place - sum.b += x; - a += x; //~ WARN unused variable: `a` - }); -} - -fn main() { - unintentional_copy_one(); - unintentional_copy_two(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.stderr deleted file mode 100644 index 0410de4c7..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/liveness_unintentional_copy.stderr +++ /dev/null @@ -1,33 +0,0 @@ -warning: value assigned to `a` is never read - --> $DIR/liveness_unintentional_copy.rs:20:9 - | -LL | a = s; - | ^ - | - = help: maybe it is overwritten before being read? -note: the lint level is defined here - --> $DIR/liveness_unintentional_copy.rs:4:9 - | -LL | #![warn(unused)] - | ^^^^^^ - = note: `#[warn(unused_assignments)]` implied by `#[warn(unused)]` - -warning: unused variable: `a` - --> $DIR/liveness_unintentional_copy.rs:20:9 - | -LL | a = s; - | ^ - | - = help: did you mean to capture by reference instead? - = note: `#[warn(unused_variables)]` implied by `#[warn(unused)]` - -warning: unused variable: `a` - --> $DIR/liveness_unintentional_copy.rs:36:9 - | -LL | a += x; - | ^ - | - = help: did you mean to capture by reference instead? - -warning: 3 warnings emitted - diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.rs deleted file mode 100644 index fa73ff23f..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.rs +++ /dev/null @@ -1,28 +0,0 @@ -// edition:2021 - -// Test that when a borrow checker diagnostics are emitted, it's as precise -// as the capture by the closure. - -#![allow(unused)] - -struct Point { - x: i32, - y: i32, -} -struct Wrapper { - p: Point, -} - -fn main() { - let mut w = Wrapper { p: Point { x: 10, y: 10 } }; - - let mut c = || { - w.p.x += 20; - }; - - let py = &mut w.p.x; - //~^ ERROR: cannot borrow `w.p.x` as mutable more than once at a time - c(); - - *py = 20 -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.stderr deleted file mode 100644 index ac4c9c937..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/multilevel-path.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error[E0499]: cannot borrow `w.p.x` as mutable more than once at a time - --> $DIR/multilevel-path.rs:23:14 - | -LL | let mut c = || { - | -- first mutable borrow occurs here -LL | w.p.x += 20; - | ----- first borrow occurs due to use of `w.p.x` in closure -... -LL | let py = &mut w.p.x; - | ^^^^^^^^^^ second mutable borrow occurs here -LL | -LL | c(); - | - first borrow later used here - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0499`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.rs deleted file mode 100644 index 3d5a31e8b..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.rs +++ /dev/null @@ -1,37 +0,0 @@ -// edition:2021 - -// Test that we can't mutate a place if we need to deref an imm-borrow -// to reach it. - -fn imm_mut_ref() { - let mut x = String::new(); - let y = String::new(); - let mref_x = &mut x; - let ref_mref_x = &mref_x; - - let c = || { - //~^ ERROR: cannot borrow `**ref_mref_x` as mutable, as it is behind a `&` reference - **ref_mref_x = y; - }; - - c(); -} - -fn mut_imm_ref() { - let x = String::new(); - let y = String::new(); - let mut ref_x = &x; - let mref_ref_x = &mut ref_x; - - let c = || { - //~^ ERROR: cannot borrow `**mref_ref_x` as mutable, as it is behind a `&` reference - **mref_ref_x = y; - }; - - c(); -} - -fn main() { - imm_mut_ref(); - mut_imm_ref(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.stderr deleted file mode 100644 index 481d7e585..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/mut_ref.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0596]: cannot borrow `**ref_mref_x` as mutable, as it is behind a `&` reference - --> $DIR/mut_ref.rs:12:13 - | -LL | let ref_mref_x = &mref_x; - | ------- help: consider changing this to be a mutable reference: `&mut mref_x` -LL | -LL | let c = || { - | ^^ `ref_mref_x` is a `&` reference, so the data it refers to cannot be borrowed as mutable -LL | -LL | **ref_mref_x = y; - | ------------ mutable borrow occurs due to use of `**ref_mref_x` in closure - -error[E0596]: cannot borrow `**mref_ref_x` as mutable, as it is behind a `&` reference - --> $DIR/mut_ref.rs:26:13 - | -LL | let c = || { - | ^^ cannot borrow as mutable -LL | -LL | **mref_ref_x = y; - | ------------ mutable borrow occurs due to use of `**mref_ref_x` in closure - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.rs deleted file mode 100644 index 1488f3296..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.rs +++ /dev/null @@ -1,32 +0,0 @@ -// edition:2021 - -// Given how the closure desugaring is implemented (at least at the time of writing this test), -// we don't need to truncate the captured path to a reference into a packed-struct if the field -// being referenced will be moved into the closure, since it's safe to move out a field from a -// packed-struct. -// -// However to avoid surprises for the user, or issues when the closure is -// inlined we will truncate the capture to access just the struct regardless of if the field -// might get moved into the closure. -// -// It is possible for someone to try writing the code that relies on the desugaring to create a ref -// into a packed-struct. Here we test that the compiler still detects that case. -fn test_missing_unsafe_warning_on_repr_packed() { - #[repr(packed)] - struct Foo { x: String } - - let foo = Foo { x: String::new() }; - - let c = || { - println!("{}", foo.x); - //~^ ERROR: reference to packed field is unaligned - //~| WARNING: this was previously accepted by the compiler but is being phased out - let _z = foo.x; - }; - - c(); -} - -fn main() { - test_missing_unsafe_warning_on_repr_packed(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.stderr deleted file mode 100644 index 508c4b911..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/repr_packed.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error: reference to packed field is unaligned - --> $DIR/repr_packed.rs:21:24 - | -LL | println!("{}", foo.x); - | ^^^^^ - | - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #82523 <https://github.com/rust-lang/rust/issues/82523> - = note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced) - = help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers) - = note: `#[deny(unaligned_references)]` on by default - = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to previous error - -Future incompatibility report: Future breakage diagnostic: -error: reference to packed field is unaligned - --> $DIR/repr_packed.rs:21:24 - | -LL | println!("{}", foo.x); - | ^^^^^ - | - = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! - = note: for more information, see issue #82523 <https://github.com/rust-lang/rust/issues/82523> - = note: fields of packed structs are not properly aligned, and creating a misaligned reference is undefined behavior (even if that reference is never dereferenced) - = help: copy the field contents to a local variable, or replace the reference with a raw pointer and use `read_unaligned`/`write_unaligned` (loads and stores via `*p` must be properly aligned even when using raw pointers) - = note: `#[deny(unaligned_references)]` on by default - = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) - diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.rs deleted file mode 100644 index ed2d9a3de..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.rs +++ /dev/null @@ -1,25 +0,0 @@ -// edition:2021 - -// Test that borrow checker error is accurate and that min capture pass of the -// closure analysis is working as expected. - -#[derive(Debug)] -struct Point { - x: i32, - y: i32, -} - -fn main() { - let mut p = Point { x: 10, y: 20 }; - - // `p` is captured via mutable borrow. - let mut c = || { - p.x += 10; - println!("{:?}", p); - }; - - - println!("{:?}", p); - //~^ ERROR: cannot borrow `p` as immutable because it is also borrowed as mutable - c(); -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.stderr deleted file mode 100644 index 06157b2af..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/simple-struct-min-capture.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0502]: cannot borrow `p` as immutable because it is also borrowed as mutable - --> $DIR/simple-struct-min-capture.rs:22:22 - | -LL | let mut c = || { - | -- mutable borrow occurs here -LL | p.x += 10; - | --- capture is mutable because of use here -LL | println!("{:?}", p); - | - first borrow occurs due to use of `p` in closure -... -LL | println!("{:?}", p); - | ^ immutable borrow occurs here -LL | -LL | c(); - | - mutable borrow later used here - | - = note: this error originates in the macro `$crate::format_args_nl` which comes from the expansion of the macro `println` (in Nightly builds, run with -Z macro-backtrace for more info) - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0502`. diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/union.rs b/src/test/ui/closures/2229_closure_analysis/diagnostics/union.rs deleted file mode 100644 index 46b54846e..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/union.rs +++ /dev/null @@ -1,25 +0,0 @@ -// edition:2021 - -// Test that we point to the correct location that results a union being captured. -// Union is special because it can't be disjointly captured. - -union A { - y: u32, - x: (), -} - -fn main() { - let mut a = A { y: 1 }; - let mut c = || { - //~^ borrow of `a.y` occurs here - let _ = unsafe { &a.y }; - let _ = &mut a; - //~^ borrow occurs due to use in closure - let _ = unsafe { &mut a.y }; - }; - a.y = 1; - //~^ cannot assign to `a.y` because it is borrowed [E0506] - //~| assignment to borrowed `a.y` occurs here - c(); - //~^ borrow later used here -} diff --git a/src/test/ui/closures/2229_closure_analysis/diagnostics/union.stderr b/src/test/ui/closures/2229_closure_analysis/diagnostics/union.stderr deleted file mode 100644 index 7c34e2336..000000000 --- a/src/test/ui/closures/2229_closure_analysis/diagnostics/union.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error[E0506]: cannot assign to `a.y` because it is borrowed - --> $DIR/union.rs:20:5 - | -LL | let mut c = || { - | -- borrow of `a.y` occurs here -... -LL | let _ = &mut a; - | - borrow occurs due to use in closure -... -LL | a.y = 1; - | ^^^^^^^ assignment to borrowed `a.y` occurs here -... -LL | c(); - | - borrow later used here - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0506`. |