From 64d98f8ee037282c35007b64c2649055c56af1db Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:19:03 +0200 Subject: Merging upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- src/test/ui/let-else/const-fn.rs | 18 -- src/test/ui/let-else/issue-100103.rs | 15 -- src/test/ui/let-else/issue-102317.rs | 20 -- src/test/ui/let-else/issue-94176.rs | 10 - src/test/ui/let-else/issue-94176.stderr | 19 -- src/test/ui/let-else/issue-99975.rs | 20 -- src/test/ui/let-else/let-else-allow-in-expr.rs | 28 --- src/test/ui/let-else/let-else-allow-in-expr.stderr | 20 -- src/test/ui/let-else/let-else-allow-unused.rs | 15 -- src/test/ui/let-else/let-else-allow-unused.stderr | 14 -- .../let-else-binding-explicit-mut-annotated.rs | 16 -- .../let-else-binding-explicit-mut-annotated.stderr | 25 -- .../let-else-binding-explicit-mut-borrow.rs | 13 - .../let-else-binding-explicit-mut-borrow.stderr | 9 - .../let-else/let-else-binding-explicit-mut-pass.rs | 13 - .../ui/let-else/let-else-binding-explicit-mut.rs | 20 -- .../let-else/let-else-binding-explicit-mut.stderr | 21 -- src/test/ui/let-else/let-else-binding-immutable.rs | 10 - .../ui/let-else/let-else-binding-immutable.stderr | 9 - src/test/ui/let-else/let-else-bindings.rs | 75 ------ .../ui/let-else/let-else-bool-binop-init.fixed | 8 - src/test/ui/let-else/let-else-bool-binop-init.rs | 8 - .../ui/let-else/let-else-bool-binop-init.stderr | 24 -- .../ui/let-else/let-else-brace-before-else.fixed | 26 -- src/test/ui/let-else/let-else-brace-before-else.rs | 26 -- .../ui/let-else/let-else-brace-before-else.stderr | 46 ---- src/test/ui/let-else/let-else-check.rs | 17 -- src/test/ui/let-else/let-else-check.stderr | 20 -- .../let-else/let-else-deref-coercion-annotated.rs | 77 ------ src/test/ui/let-else/let-else-deref-coercion.rs | 75 ------ .../ui/let-else/let-else-deref-coercion.stderr | 19 -- src/test/ui/let-else/let-else-destructuring.rs | 17 -- src/test/ui/let-else/let-else-destructuring.stderr | 17 -- src/test/ui/let-else/let-else-drop-order.rs | 270 --------------------- .../ui/let-else/let-else-drop-order.run.stdout | 51 ---- src/test/ui/let-else/let-else-if.rs | 8 - src/test/ui/let-else/let-else-if.stderr | 17 -- src/test/ui/let-else/let-else-irrefutable.rs | 11 - src/test/ui/let-else/let-else-irrefutable.stderr | 21 -- src/test/ui/let-else/let-else-missing-semicolon.rs | 9 - .../ui/let-else/let-else-missing-semicolon.stderr | 18 -- src/test/ui/let-else/let-else-no-double-error.rs | 12 - .../ui/let-else/let-else-no-double-error.stderr | 9 - src/test/ui/let-else/let-else-non-copy.rs | 45 ---- src/test/ui/let-else/let-else-non-diverging.rs | 22 -- src/test/ui/let-else/let-else-non-diverging.stderr | 55 ----- src/test/ui/let-else/let-else-ref-bindings-pass.rs | 71 ------ src/test/ui/let-else/let-else-ref-bindings.rs | 62 ----- src/test/ui/let-else/let-else-ref-bindings.stderr | 83 ------- src/test/ui/let-else/let-else-run-pass.rs | 35 --- src/test/ui/let-else/let-else-scope.rs | 5 - src/test/ui/let-else/let-else-scope.stderr | 9 - src/test/ui/let-else/let-else-slicing-error.rs | 9 - src/test/ui/let-else/let-else-slicing-error.stderr | 11 - .../let-else/let-else-source-expr-nomove-pass.rs | 17 -- src/test/ui/let-else/let-else-temp-borrowck.rs | 26 -- .../ui/let-else/let-else-temporary-lifetime.rs | 99 -------- src/test/ui/let-else/let-else-then-diverge.rs | 17 -- src/test/ui/let-else/let-else-then-diverge.stderr | 14 -- src/test/ui/let-else/let-else.rs | 8 - 60 files changed, 1784 deletions(-) delete mode 100644 src/test/ui/let-else/const-fn.rs delete mode 100644 src/test/ui/let-else/issue-100103.rs delete mode 100644 src/test/ui/let-else/issue-102317.rs delete mode 100644 src/test/ui/let-else/issue-94176.rs delete mode 100644 src/test/ui/let-else/issue-94176.stderr delete mode 100644 src/test/ui/let-else/issue-99975.rs delete mode 100644 src/test/ui/let-else/let-else-allow-in-expr.rs delete mode 100644 src/test/ui/let-else/let-else-allow-in-expr.stderr delete mode 100644 src/test/ui/let-else/let-else-allow-unused.rs delete mode 100644 src/test/ui/let-else/let-else-allow-unused.stderr delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut-annotated.rs delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut-annotated.stderr delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut-borrow.rs delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut-borrow.stderr delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut-pass.rs delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut.rs delete mode 100644 src/test/ui/let-else/let-else-binding-explicit-mut.stderr delete mode 100644 src/test/ui/let-else/let-else-binding-immutable.rs delete mode 100644 src/test/ui/let-else/let-else-binding-immutable.stderr delete mode 100644 src/test/ui/let-else/let-else-bindings.rs delete mode 100644 src/test/ui/let-else/let-else-bool-binop-init.fixed delete mode 100644 src/test/ui/let-else/let-else-bool-binop-init.rs delete mode 100644 src/test/ui/let-else/let-else-bool-binop-init.stderr delete mode 100644 src/test/ui/let-else/let-else-brace-before-else.fixed delete mode 100644 src/test/ui/let-else/let-else-brace-before-else.rs delete mode 100644 src/test/ui/let-else/let-else-brace-before-else.stderr delete mode 100644 src/test/ui/let-else/let-else-check.rs delete mode 100644 src/test/ui/let-else/let-else-check.stderr delete mode 100644 src/test/ui/let-else/let-else-deref-coercion-annotated.rs delete mode 100644 src/test/ui/let-else/let-else-deref-coercion.rs delete mode 100644 src/test/ui/let-else/let-else-deref-coercion.stderr delete mode 100644 src/test/ui/let-else/let-else-destructuring.rs delete mode 100644 src/test/ui/let-else/let-else-destructuring.stderr delete mode 100644 src/test/ui/let-else/let-else-drop-order.rs delete mode 100644 src/test/ui/let-else/let-else-drop-order.run.stdout delete mode 100644 src/test/ui/let-else/let-else-if.rs delete mode 100644 src/test/ui/let-else/let-else-if.stderr delete mode 100644 src/test/ui/let-else/let-else-irrefutable.rs delete mode 100644 src/test/ui/let-else/let-else-irrefutable.stderr delete mode 100644 src/test/ui/let-else/let-else-missing-semicolon.rs delete mode 100644 src/test/ui/let-else/let-else-missing-semicolon.stderr delete mode 100644 src/test/ui/let-else/let-else-no-double-error.rs delete mode 100644 src/test/ui/let-else/let-else-no-double-error.stderr delete mode 100644 src/test/ui/let-else/let-else-non-copy.rs delete mode 100644 src/test/ui/let-else/let-else-non-diverging.rs delete mode 100644 src/test/ui/let-else/let-else-non-diverging.stderr delete mode 100644 src/test/ui/let-else/let-else-ref-bindings-pass.rs delete mode 100644 src/test/ui/let-else/let-else-ref-bindings.rs delete mode 100644 src/test/ui/let-else/let-else-ref-bindings.stderr delete mode 100644 src/test/ui/let-else/let-else-run-pass.rs delete mode 100644 src/test/ui/let-else/let-else-scope.rs delete mode 100644 src/test/ui/let-else/let-else-scope.stderr delete mode 100644 src/test/ui/let-else/let-else-slicing-error.rs delete mode 100644 src/test/ui/let-else/let-else-slicing-error.stderr delete mode 100644 src/test/ui/let-else/let-else-source-expr-nomove-pass.rs delete mode 100644 src/test/ui/let-else/let-else-temp-borrowck.rs delete mode 100644 src/test/ui/let-else/let-else-temporary-lifetime.rs delete mode 100644 src/test/ui/let-else/let-else-then-diverge.rs delete mode 100644 src/test/ui/let-else/let-else-then-diverge.stderr delete mode 100644 src/test/ui/let-else/let-else.rs (limited to 'src/test/ui/let-else') diff --git a/src/test/ui/let-else/const-fn.rs b/src/test/ui/let-else/const-fn.rs deleted file mode 100644 index a3921b803..000000000 --- a/src/test/ui/let-else/const-fn.rs +++ /dev/null @@ -1,18 +0,0 @@ -// run-pass -// issue #101932 - - -const fn foo(a: Option) -> i32 { - let Some(a) = a else { - return 42 - }; - - a + 1 -} - -fn main() { - const A: i32 = foo(None); - const B: i32 = foo(Some(1)); - - println!("{} {}", A, B); -} diff --git a/src/test/ui/let-else/issue-100103.rs b/src/test/ui/let-else/issue-100103.rs deleted file mode 100644 index f5f9b2f5f..000000000 --- a/src/test/ui/let-else/issue-100103.rs +++ /dev/null @@ -1,15 +0,0 @@ -// edition:2021 -// check-pass - -#![feature(try_blocks)] - - -fn main() { - let _: Result = try { - let Some(x) = Some(0) else { - Err(1)? - }; - - x - }; -} diff --git a/src/test/ui/let-else/issue-102317.rs b/src/test/ui/let-else/issue-102317.rs deleted file mode 100644 index 7369b4938..000000000 --- a/src/test/ui/let-else/issue-102317.rs +++ /dev/null @@ -1,20 +0,0 @@ -// issue #102317 -// build-pass -// compile-flags: --edition 2021 -C opt-level=3 -Zvalidate-mir - -struct SegmentJob; - -impl Drop for SegmentJob { - fn drop(&mut self) {} -} - -pub async fn run() -> Result<(), ()> { - let jobs = Vec::::new(); - let Some(_job) = jobs.into_iter().next() else { - return Ok(()) - }; - - Ok(()) -} - -fn main() {} diff --git a/src/test/ui/let-else/issue-94176.rs b/src/test/ui/let-else/issue-94176.rs deleted file mode 100644 index f76dfc15b..000000000 --- a/src/test/ui/let-else/issue-94176.rs +++ /dev/null @@ -1,10 +0,0 @@ -// Issue #94176: wrong span for the error message of a mismatched type error, -// if the function uses a `let else` construct. - - -pub fn test(a: Option) -> Option { //~ ERROR mismatched types - let Some(_) = a else { return None; }; - println!("Foo"); -} - -fn main() {} diff --git a/src/test/ui/let-else/issue-94176.stderr b/src/test/ui/let-else/issue-94176.stderr deleted file mode 100644 index 0cb97acee..000000000 --- a/src/test/ui/let-else/issue-94176.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/issue-94176.rs:5:32 - | -LL | pub fn test(a: Option) -> Option { - | ---- ^^^^^^^^^^^ expected enum `Option`, found `()` - | | - | implicitly returns `()` as its body has no tail or `return` expression - | - = note: expected enum `Option` - found unit type `()` -help: consider returning the local binding `a` - | -LL ~ println!("Foo"); -LL + a - | - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/let-else/issue-99975.rs b/src/test/ui/let-else/issue-99975.rs deleted file mode 100644 index 5b164f347..000000000 --- a/src/test/ui/let-else/issue-99975.rs +++ /dev/null @@ -1,20 +0,0 @@ -// run-pass -// compile-flags: -C opt-level=3 -Zvalidate-mir - - - -fn return_result() -> Option { - Some("ok".to_string()) -} - -fn start() -> String { - let Some(content) = return_result() else { - return "none".to_string() - }; - - content -} - -fn main() { - start(); -} diff --git a/src/test/ui/let-else/let-else-allow-in-expr.rs b/src/test/ui/let-else/let-else-allow-in-expr.rs deleted file mode 100644 index 33acb6c6a..000000000 --- a/src/test/ui/let-else/let-else-allow-in-expr.rs +++ /dev/null @@ -1,28 +0,0 @@ -#![deny(unused_variables)] - -fn main() { - let Some(_): Option = ({ - let x = 1; //~ ERROR unused variable: `x` - Some(1) - }) else { - return; - }; - - #[allow(unused_variables)] - let Some(_): Option = ({ - let x = 1; - Some(1) - }) else { - return; - }; - - let Some(_): Option = ({ - #[allow(unused_variables)] - let x = 1; - Some(1) - }) else { - return; - }; - - let x = 1; //~ ERROR unused variable: `x` -} diff --git a/src/test/ui/let-else/let-else-allow-in-expr.stderr b/src/test/ui/let-else/let-else-allow-in-expr.stderr deleted file mode 100644 index 3b2b9066c..000000000 --- a/src/test/ui/let-else/let-else-allow-in-expr.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error: unused variable: `x` - --> $DIR/let-else-allow-in-expr.rs:5:13 - | -LL | let x = 1; - | ^ help: if this is intentional, prefix it with an underscore: `_x` - | -note: the lint level is defined here - --> $DIR/let-else-allow-in-expr.rs:1:9 - | -LL | #![deny(unused_variables)] - | ^^^^^^^^^^^^^^^^ - -error: unused variable: `x` - --> $DIR/let-else-allow-in-expr.rs:27:9 - | -LL | let x = 1; - | ^ help: if this is intentional, prefix it with an underscore: `_x` - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/let-else/let-else-allow-unused.rs b/src/test/ui/let-else/let-else-allow-unused.rs deleted file mode 100644 index bbb1c7bea..000000000 --- a/src/test/ui/let-else/let-else-allow-unused.rs +++ /dev/null @@ -1,15 +0,0 @@ -// issue #89807 - - - -#[deny(unused_variables)] - -fn main() { - let value = Some(String::new()); - #[allow(unused)] - let banana = 1; - #[allow(unused)] - let Some(chaenomeles) = value.clone() else { return }; // OK - - let Some(chaenomeles) = value else { return }; //~ ERROR unused variable: `chaenomeles` -} diff --git a/src/test/ui/let-else/let-else-allow-unused.stderr b/src/test/ui/let-else/let-else-allow-unused.stderr deleted file mode 100644 index 05b8a9169..000000000 --- a/src/test/ui/let-else/let-else-allow-unused.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unused variable: `chaenomeles` - --> $DIR/let-else-allow-unused.rs:14:14 - | -LL | let Some(chaenomeles) = value else { return }; - | ^^^^^^^^^^^ help: if this is intentional, prefix it with an underscore: `_chaenomeles` - | -note: the lint level is defined here - --> $DIR/let-else-allow-unused.rs:5:8 - | -LL | #[deny(unused_variables)] - | ^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.rs b/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.rs deleted file mode 100644 index 955f33ee1..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.rs +++ /dev/null @@ -1,16 +0,0 @@ -// from rfc2005 test suite - - - -// Verify the binding mode shifts - only when no `&` are auto-dereferenced is the -// final default binding mode mutable. - -fn main() { - let Some(n): &mut Option = &&Some(5i32) else { return }; //~ ERROR mismatched types - *n += 1; - let _ = n; - - let Some(n): &mut Option = &&mut Some(5i32) else { return }; //~ ERROR mismatched types - *n += 1; - let _ = n; -} diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.stderr b/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.stderr deleted file mode 100644 index 065787cab..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut-annotated.stderr +++ /dev/null @@ -1,25 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/let-else-binding-explicit-mut-annotated.rs:9:37 - | -LL | let Some(n): &mut Option = &&Some(5i32) else { return }; - | ---------------- ^^^^^^^^^^^^ types differ in mutability - | | - | expected due to this - | - = note: expected mutable reference `&mut Option` - found reference `&&Option` - -error[E0308]: mismatched types - --> $DIR/let-else-binding-explicit-mut-annotated.rs:13:37 - | -LL | let Some(n): &mut Option = &&mut Some(5i32) else { return }; - | ---------------- ^^^^^^^^^^^^^^^^ types differ in mutability - | | - | expected due to this - | - = note: expected mutable reference `&mut Option` - found reference `&&mut Option` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.rs b/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.rs deleted file mode 100644 index 1524d0102..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.rs +++ /dev/null @@ -1,13 +0,0 @@ -// Slightly different from explicit-mut-annotated -- this won't show an error until borrowck. -// Should it show a type error instead? - - - -fn main() { - let Some(n): &mut Option = &mut &Some(5i32) else { - //~^ ERROR cannot borrow data in a `&` reference as mutable - return - }; - *n += 1; - let _ = n; -} diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.stderr b/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.stderr deleted file mode 100644 index 023fab8fe..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut-borrow.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0596]: cannot borrow data in a `&` reference as mutable - --> $DIR/let-else-binding-explicit-mut-borrow.rs:7:37 - | -LL | let Some(n): &mut Option = &mut &Some(5i32) else { - | ^^^^^^^^^^^^^^^^ cannot borrow as mutable - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0596`. diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut-pass.rs b/src/test/ui/let-else/let-else-binding-explicit-mut-pass.rs deleted file mode 100644 index b0a6264a1..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut-pass.rs +++ /dev/null @@ -1,13 +0,0 @@ -// check-pass - - - -fn main() { - let Some(n) = &mut &mut Some(5i32) else { return; }; - *n += 1; // OK - let _ = n; - - let Some(n): &mut Option = &mut &mut Some(5i32) else { return; }; - *n += 1; // OK - let _ = n; -} diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut.rs b/src/test/ui/let-else/let-else-binding-explicit-mut.rs deleted file mode 100644 index a153b3af0..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut.rs +++ /dev/null @@ -1,20 +0,0 @@ -// from rfc2005 test suite - - - -// Verify the binding mode shifts - only when no `&` are auto-dereferenced is the -// final default binding mode mutable. - -fn main() { - let Some(n) = &&Some(5i32) else { return }; - *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference - let _ = n; - - let Some(n) = &mut &Some(5i32) else { return }; - *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference - let _ = n; - - let Some(n) = &&mut Some(5i32) else { return }; - *n += 1; //~ ERROR cannot assign to `*n`, which is behind a `&` reference - let _ = n; -} diff --git a/src/test/ui/let-else/let-else-binding-explicit-mut.stderr b/src/test/ui/let-else/let-else-binding-explicit-mut.stderr deleted file mode 100644 index 45f2b6b3b..000000000 --- a/src/test/ui/let-else/let-else-binding-explicit-mut.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0594]: cannot assign to `*n`, which is behind a `&` reference - --> $DIR/let-else-binding-explicit-mut.rs:10:5 - | -LL | *n += 1; - | ^^^^^^^ `n` is a `&` reference, so the data it refers to cannot be written - -error[E0594]: cannot assign to `*n`, which is behind a `&` reference - --> $DIR/let-else-binding-explicit-mut.rs:14:5 - | -LL | *n += 1; - | ^^^^^^^ `n` is a `&` reference, so the data it refers to cannot be written - -error[E0594]: cannot assign to `*n`, which is behind a `&` reference - --> $DIR/let-else-binding-explicit-mut.rs:18:5 - | -LL | *n += 1; - | ^^^^^^^ `n` is a `&` reference, so the data it refers to cannot be written - -error: aborting due to 3 previous errors - -For more information about this error, try `rustc --explain E0594`. diff --git a/src/test/ui/let-else/let-else-binding-immutable.rs b/src/test/ui/let-else/let-else-binding-immutable.rs deleted file mode 100644 index ff2d9f240..000000000 --- a/src/test/ui/let-else/let-else-binding-immutable.rs +++ /dev/null @@ -1,10 +0,0 @@ -// from rfc2005 test suite - - - -pub fn main() { - let Some(x) = &Some(3) else { - panic!(); - }; - *x += 1; //~ ERROR: cannot assign to `*x`, which is behind a `&` reference -} diff --git a/src/test/ui/let-else/let-else-binding-immutable.stderr b/src/test/ui/let-else/let-else-binding-immutable.stderr deleted file mode 100644 index dd1365a9e..000000000 --- a/src/test/ui/let-else/let-else-binding-immutable.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0594]: cannot assign to `*x`, which is behind a `&` reference - --> $DIR/let-else-binding-immutable.rs:9:5 - | -LL | *x += 1; - | ^^^^^^^ `x` is a `&` reference, so the data it refers to cannot be written - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0594`. diff --git a/src/test/ui/let-else/let-else-bindings.rs b/src/test/ui/let-else/let-else-bindings.rs deleted file mode 100644 index 7d2cad978..000000000 --- a/src/test/ui/let-else/let-else-bindings.rs +++ /dev/null @@ -1,75 +0,0 @@ -// run-pass -// adapted from src/test/ui/binding/if-let.rs - -#![allow(dead_code)] - -fn none() -> bool { - let None = Some("test") else { - return true; - }; - false -} - -fn ok() -> bool { - let Ok(()) = Err::<(),&'static str>("test") else { - return true; - }; - false -} - -pub fn main() { - let x = Some(3); - let Some(y) = x else { - panic!("let-else panicked"); - }; - assert_eq!(y, 3); - let Some(_) = x else { - panic!("bad match"); - }; - assert!(none()); - assert!(ok()); - - assert!((|| { - let 1 = 2 else { - return true; - }; - false - })()); - - enum Foo { - One, - Two(usize), - Three(String, isize), - } - - let foo = Foo::Three("three".to_string(), 42); - let one = || { - let Foo::One = foo else { - return true; - }; - false - }; - assert!(one()); - let two = || { - let Foo::Two(_x) = foo else { - return true; - }; - false - }; - assert!(two()); - let three = || { - let Foo::Three(s, _x) = foo else { - return false; - }; - s == "three" - }; - assert!(three()); - - let a@Foo::Two(_) = Foo::Two(42_usize) else { - panic!("bad match") - }; - let Foo::Two(b) = a else { - panic!("panic in nested `if let`"); - }; - assert_eq!(b, 42_usize); -} diff --git a/src/test/ui/let-else/let-else-bool-binop-init.fixed b/src/test/ui/let-else/let-else-bool-binop-init.fixed deleted file mode 100644 index 20e558ca9..000000000 --- a/src/test/ui/let-else/let-else-bool-binop-init.fixed +++ /dev/null @@ -1,8 +0,0 @@ -// run-rustfix - - - -fn main() { - let true = (true && false) else { return }; //~ ERROR a `&&` expression cannot be directly assigned in `let...else` - let true = (true || false) else { return }; //~ ERROR a `||` expression cannot be directly assigned in `let...else` -} diff --git a/src/test/ui/let-else/let-else-bool-binop-init.rs b/src/test/ui/let-else/let-else-bool-binop-init.rs deleted file mode 100644 index f88179a94..000000000 --- a/src/test/ui/let-else/let-else-bool-binop-init.rs +++ /dev/null @@ -1,8 +0,0 @@ -// run-rustfix - - - -fn main() { - let true = true && false else { return }; //~ ERROR a `&&` expression cannot be directly assigned in `let...else` - let true = true || false else { return }; //~ ERROR a `||` expression cannot be directly assigned in `let...else` -} diff --git a/src/test/ui/let-else/let-else-bool-binop-init.stderr b/src/test/ui/let-else/let-else-bool-binop-init.stderr deleted file mode 100644 index edee65762..000000000 --- a/src/test/ui/let-else/let-else-bool-binop-init.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error: a `&&` expression cannot be directly assigned in `let...else` - --> $DIR/let-else-bool-binop-init.rs:6:16 - | -LL | let true = true && false else { return }; - | ^^^^^^^^^^^^^ - | -help: wrap the expression in parentheses - | -LL | let true = (true && false) else { return }; - | + + - -error: a `||` expression cannot be directly assigned in `let...else` - --> $DIR/let-else-bool-binop-init.rs:7:16 - | -LL | let true = true || false else { return }; - | ^^^^^^^^^^^^^ - | -help: wrap the expression in parentheses - | -LL | let true = (true || false) else { return }; - | + + - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/let-else/let-else-brace-before-else.fixed b/src/test/ui/let-else/let-else-brace-before-else.fixed deleted file mode 100644 index a75c770dd..000000000 --- a/src/test/ui/let-else/let-else-brace-before-else.fixed +++ /dev/null @@ -1,26 +0,0 @@ -// run-rustfix - - - -fn main() { - let Some(1) = ({ Some(1) }) else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let Some(1) = (loop { break Some(1) }) else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let 2 = 1 + (match 1 { n => n }) else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let Some(1) = (unsafe { unsafe_fn() }) else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; -} - -unsafe fn unsafe_fn() -> T { - unimplemented!(); -} diff --git a/src/test/ui/let-else/let-else-brace-before-else.rs b/src/test/ui/let-else/let-else-brace-before-else.rs deleted file mode 100644 index 5603b946f..000000000 --- a/src/test/ui/let-else/let-else-brace-before-else.rs +++ /dev/null @@ -1,26 +0,0 @@ -// run-rustfix - - - -fn main() { - let Some(1) = { Some(1) } else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let Some(1) = loop { break Some(1) } else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let 2 = 1 + match 1 { n => n } else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; - let Some(1) = unsafe { unsafe_fn() } else { - //~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed - return; - }; -} - -unsafe fn unsafe_fn() -> T { - unimplemented!(); -} diff --git a/src/test/ui/let-else/let-else-brace-before-else.stderr b/src/test/ui/let-else/let-else-brace-before-else.stderr deleted file mode 100644 index cb01e4c18..000000000 --- a/src/test/ui/let-else/let-else-brace-before-else.stderr +++ /dev/null @@ -1,46 +0,0 @@ -error: right curly brace `}` before `else` in a `let...else` statement not allowed - --> $DIR/let-else-brace-before-else.rs:6:29 - | -LL | let Some(1) = { Some(1) } else { - | ^ - | -help: wrap the expression in parentheses - | -LL | let Some(1) = ({ Some(1) }) else { - | + + - -error: right curly brace `}` before `else` in a `let...else` statement not allowed - --> $DIR/let-else-brace-before-else.rs:10:40 - | -LL | let Some(1) = loop { break Some(1) } else { - | ^ - | -help: wrap the expression in parentheses - | -LL | let Some(1) = (loop { break Some(1) }) else { - | + + - -error: right curly brace `}` before `else` in a `let...else` statement not allowed - --> $DIR/let-else-brace-before-else.rs:14:34 - | -LL | let 2 = 1 + match 1 { n => n } else { - | ^ - | -help: wrap the expression in parentheses - | -LL | let 2 = 1 + (match 1 { n => n }) else { - | + + - -error: right curly brace `}` before `else` in a `let...else` statement not allowed - --> $DIR/let-else-brace-before-else.rs:18:40 - | -LL | let Some(1) = unsafe { unsafe_fn() } else { - | ^ - | -help: wrap the expression in parentheses - | -LL | let Some(1) = (unsafe { unsafe_fn() }) else { - | + + - -error: aborting due to 4 previous errors - diff --git a/src/test/ui/let-else/let-else-check.rs b/src/test/ui/let-else/let-else-check.rs deleted file mode 100644 index 713fd986e..000000000 --- a/src/test/ui/let-else/let-else-check.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![deny(unused_variables)] - -fn main() { - // type annotation, attributes - #[allow(unused_variables)] - let Some(_): Option = Some(Default::default()) else { - let x = 1; // OK - return; - }; - - let Some(_): Option = Some(Default::default()) else { - let x = 1; //~ ERROR unused variable: `x` - return; - }; - - let x = 1; //~ ERROR unused variable: `x` -} diff --git a/src/test/ui/let-else/let-else-check.stderr b/src/test/ui/let-else/let-else-check.stderr deleted file mode 100644 index bdecbf708..000000000 --- a/src/test/ui/let-else/let-else-check.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error: unused variable: `x` - --> $DIR/let-else-check.rs:12:13 - | -LL | let x = 1; - | ^ help: if this is intentional, prefix it with an underscore: `_x` - | -note: the lint level is defined here - --> $DIR/let-else-check.rs:1:9 - | -LL | #![deny(unused_variables)] - | ^^^^^^^^^^^^^^^^ - -error: unused variable: `x` - --> $DIR/let-else-check.rs:16:9 - | -LL | let x = 1; - | ^ help: if this is intentional, prefix it with an underscore: `_x` - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/let-else/let-else-deref-coercion-annotated.rs b/src/test/ui/let-else/let-else-deref-coercion-annotated.rs deleted file mode 100644 index 60fdf825a..000000000 --- a/src/test/ui/let-else/let-else-deref-coercion-annotated.rs +++ /dev/null @@ -1,77 +0,0 @@ -// check-pass -// -// Taken from https://github.com/rust-lang/rust/blob/6cc0a764e082d9c0abcf37a768d5889247ba13e2/compiler/rustc_typeck/src/check/_match.rs#L445-L462 -// -// We attempt to `let Bar::Present(_): &mut Bar = foo else { ... }` where foo is meant to -// Deref/DerefMut to Bar. You can do this with an irrefutable binding, so it should work with -// let-else too. - - -use std::ops::{Deref, DerefMut}; - -struct Foo(Bar); - -enum Bar { - Present(u32), - Absent, -} -impl Deref for Foo { - type Target = Bar; - fn deref(&self) -> &Bar { - &self.0 - } -} -impl DerefMut for Foo { - fn deref_mut(&mut self) -> &mut Bar { - &mut self.0 - } -} -impl Bar { - fn bar(&self) -> Option { - let Bar::Present(z): &Bar = self else { - return None; - }; - return Some(*z); - } -} -impl Foo { - fn set_bar_annotated(&mut self, value: u32) { - let Bar::Present(z): &mut Bar = self else { // OK - return; - }; - *z = value; - } -} - -fn main() { - let mut foo = Foo(Bar::Present(1)); - foo.set_bar_annotated(42); - assert_eq!(foo.bar(), Some(42)); - irrefutable::inner(); -} - -// The original, to show it works for irrefutable let decls -mod irrefutable { - use std::ops::{Deref, DerefMut}; - struct Foo(Bar); - struct Bar(u32); - impl Deref for Foo { - type Target = Bar; - fn deref(&self) -> &Bar { - &self.0 - } - } - impl DerefMut for Foo { - fn deref_mut(&mut self) -> &mut Bar { - &mut self.0 - } - } - fn foo(x: &mut Foo) { - let Bar(z): &mut Bar = x; // OK - *z = 42; - assert_eq!((x.0).0, 42); - } - pub fn inner() { - foo(&mut Foo(Bar(1))); - } -} diff --git a/src/test/ui/let-else/let-else-deref-coercion.rs b/src/test/ui/let-else/let-else-deref-coercion.rs deleted file mode 100644 index 052a5a8c7..000000000 --- a/src/test/ui/let-else/let-else-deref-coercion.rs +++ /dev/null @@ -1,75 +0,0 @@ -// Taken from https://github.com/rust-lang/rust/blob/6cc0a764e082d9c0abcf37a768d5889247ba13e2/compiler/rustc_typeck/src/check/_match.rs#L445-L462 -// -// We attempt to `let Bar::Present(_) = foo else { ... }` where foo is meant to Deref/DerefMut to -// Bar. This fails, you must add a type annotation like `let _: &mut Bar = _ else { ... }` - - -use std::ops::{Deref, DerefMut}; - -struct Foo(Bar); - -enum Bar { - Present(u32), - Absent, -} -impl Deref for Foo { - type Target = Bar; - fn deref(&self) -> &Bar { - &self.0 - } -} -impl DerefMut for Foo { - fn deref_mut(&mut self) -> &mut Bar { - &mut self.0 - } -} -impl Bar { - fn bar(&self) -> Option { - let Bar::Present(z): &Bar = self else { - return None; - }; - return Some(*z); - } -} -impl Foo { - // Try without the type annotation - fn set_bar_unannotated(&mut self, value: u32) { - let Bar::Present(z) = self else { //~ ERROR mismatched types - return; - }; - *z = value; - } -} - -fn main() { - let mut foo = Foo(Bar::Present(1)); - foo.set_bar_unannotated(54); - assert_eq!(foo.bar(), Some(54)); - irrefutable::inner(); -} - -// The original, to show it fails for irrefutable let decls -mod irrefutable { - use std::ops::{Deref, DerefMut}; - struct Foo(Bar); - struct Bar(u32); - impl Deref for Foo { - type Target = Bar; - fn deref(&self) -> &Bar { - &self.0 - } - } - impl DerefMut for Foo { - fn deref_mut(&mut self) -> &mut Bar { - &mut self.0 - } - } - fn foo(x: &mut Foo) { - let Bar(z) = x; //~ ERROR mismatched types - *z = 54; - assert_eq!((x.0).0, 54); - } - pub fn inner() { - foo(&mut Foo(Bar(1))); - } -} diff --git a/src/test/ui/let-else/let-else-deref-coercion.stderr b/src/test/ui/let-else/let-else-deref-coercion.stderr deleted file mode 100644 index addcd798f..000000000 --- a/src/test/ui/let-else/let-else-deref-coercion.stderr +++ /dev/null @@ -1,19 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/let-else-deref-coercion.rs:37:13 - | -LL | let Bar::Present(z) = self else { - | ^^^^^^^^^^^^^^^ ---- this expression has type `&mut Foo` - | | - | expected struct `Foo`, found enum `Bar` - -error[E0308]: mismatched types - --> $DIR/let-else-deref-coercion.rs:68:13 - | -LL | let Bar(z) = x; - | ^^^^^^ - this expression has type `&mut irrefutable::Foo` - | | - | expected struct `irrefutable::Foo`, found struct `irrefutable::Bar` - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/let-else/let-else-destructuring.rs b/src/test/ui/let-else/let-else-destructuring.rs deleted file mode 100644 index d1f1a69bf..000000000 --- a/src/test/ui/let-else/let-else-destructuring.rs +++ /dev/null @@ -1,17 +0,0 @@ -#[derive(Debug)] -enum Foo { - Done, - Nested(Option<&'static Foo>), -} - -fn walk(mut value: &Foo) { - loop { - println!("{:?}", value); - &Foo::Nested(Some(value)) = value else { break }; //~ ERROR invalid left-hand side of assignment - //~^ERROR ... else { ... } is not allowed - } -} - -fn main() { - walk(&Foo::Done); -} diff --git a/src/test/ui/let-else/let-else-destructuring.stderr b/src/test/ui/let-else/let-else-destructuring.stderr deleted file mode 100644 index 7d6cb2386..000000000 --- a/src/test/ui/let-else/let-else-destructuring.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error: ... else { ... } is not allowed - --> $DIR/let-else-destructuring.rs:10:9 - | -LL | &Foo::Nested(Some(value)) = value else { break }; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error[E0070]: invalid left-hand side of assignment - --> $DIR/let-else-destructuring.rs:10:35 - | -LL | &Foo::Nested(Some(value)) = value else { break }; - | ------------------------- ^ - | | - | cannot assign to this expression - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0070`. diff --git a/src/test/ui/let-else/let-else-drop-order.rs b/src/test/ui/let-else/let-else-drop-order.rs deleted file mode 100644 index e91e5de84..000000000 --- a/src/test/ui/let-else/let-else-drop-order.rs +++ /dev/null @@ -1,270 +0,0 @@ -// run-pass -// edition:2021 -// check-run-results -// -// Drop order tests for let else -// -// Mostly this ensures two things: -// 1. That let and let else temporary drop order is the same. -// This is a specific design request: https://github.com/rust-lang/rust/pull/93628#issuecomment-1047140316 -// 2. That the else block truly only runs after the -// temporaries have dropped. -// -// We also print some nice tables for an overview by humans. -// Changes in those tables are considered breakages, but the -// important properties 1 and 2 are also enforced by the code. -// This is important as it's easy to update the stdout file -// with a --bless and miss the impact of that change. - - -#![allow(irrefutable_let_patterns)] - -use std::cell::RefCell; -use std::rc::Rc; - -#[derive(Clone)] -struct DropAccountant(Rc>>>); - -impl DropAccountant { - fn new() -> Self { - Self(Default::default()) - } - fn build_droppy(&self, v: u32) -> Droppy { - Droppy(self.clone(), v) - } - fn build_droppy_enum_none(&self, _v: u32) -> ((), DroppyEnum) { - ((), DroppyEnum::None(self.clone())) - } - fn new_list(&self, s: impl ToString) { - self.0.borrow_mut().push(vec![s.to_string()]); - } - fn push(&self, s: impl ToString) { - let s = s.to_string(); - let mut accounts = self.0.borrow_mut(); - accounts.last_mut().unwrap().push(s); - } - fn print_table(&self) { - println!(); - - let accounts = self.0.borrow(); - let before_last = &accounts[accounts.len() - 2]; - let last = &accounts[accounts.len() - 1]; - let before_last = get_comma_list(before_last); - let last = get_comma_list(last); - const LINES: &[&str] = &[ - "vanilla", - "&", - "&mut", - "move", - "fn(this)", - "tuple", - "array", - "ref &", - "ref mut &mut", - ]; - let max_len = LINES.iter().map(|v| v.len()).max().unwrap(); - let max_len_before = before_last.iter().map(|v| v.len()).max().unwrap(); - let max_len_last = last.iter().map(|v| v.len()).max().unwrap(); - - println!( - "| {: Vec { - std::iter::once(sl[0].clone()) - .chain(sl[1..].chunks(2).map(|c| c.join(","))) - .collect::>() -} - -struct Droppy(DropAccountant, T); - -impl Drop for Droppy { - fn drop(&mut self) { - self.0.push("drop"); - } -} - -#[allow(dead_code)] -enum DroppyEnum { - Some(DropAccountant, T), - None(DropAccountant), -} - -impl Drop for DroppyEnum { - fn drop(&mut self) { - match self { - DroppyEnum::Some(acc, _inner) => acc, - DroppyEnum::None(acc) => acc, - } - .push("drop"); - } -} - -macro_rules! nestings_with { - ($construct:ident, $binding:pat, $exp:expr) => { - // vanilla: - $construct!($binding, $exp.1); - - // &: - $construct!(&$binding, &$exp.1); - - // &mut: - $construct!(&mut $binding, &mut ($exp.1)); - - { - // move: - let w = $exp; - $construct!( - $binding, - { - let w = w; - w - } - .1 - ); - } - - // fn(this): - $construct!($binding, std::convert::identity($exp).1); - }; -} - -macro_rules! nestings { - ($construct:ident, $binding:pat, $exp:expr) => { - nestings_with!($construct, $binding, $exp); - - // tuple: - $construct!(($binding, 77), ($exp.1, 77)); - - // array: - $construct!([$binding], [$exp.1]); - }; -} - -macro_rules! let_else { - ($acc:expr, $v:expr, $binding:pat, $build:ident) => { - let acc = $acc; - let v = $v; - - macro_rules! let_else_construct { - ($arg:pat, $exp:expr) => { - loop { - let $arg = $exp else { - acc.push("else"); - break; - }; - acc.push("body"); - break; - } - }; - } - nestings!(let_else_construct, $binding, acc.$build(v)); - // ref &: - let_else_construct!($binding, &acc.$build(v).1); - - // ref mut &mut: - let_else_construct!($binding, &mut acc.$build(v).1); - }; -} - -macro_rules! let_ { - ($acc:expr, $binding:tt) => { - let acc = $acc; - - macro_rules! let_construct { - ($arg:pat, $exp:expr) => {{ - let $arg = $exp; - acc.push("body"); - }}; - } - let v = 0; - { - nestings_with!(let_construct, $binding, acc.build_droppy(v)); - } - acc.push("n/a"); - acc.push("n/a"); - acc.push("n/a"); - acc.push("n/a"); - - // ref &: - let_construct!($binding, &acc.build_droppy(v).1); - - // ref mut &mut: - let_construct!($binding, &mut acc.build_droppy(v).1); - }; -} - -fn main() { - let acc = DropAccountant::new(); - - println!(" --- matching cases ---"); - - // Ensure that let and let else have the same behaviour - acc.new_list("let _"); - let_!(&acc, _); - acc.new_list("let else _"); - let_else!(&acc, 0, _, build_droppy); - acc.assert_equality_last_two_lists(); - acc.print_table(); - - // Ensure that let and let else have the same behaviour - acc.new_list("let _v"); - let_!(&acc, _v); - acc.new_list("let else _v"); - let_else!(&acc, 0, _v, build_droppy); - acc.assert_equality_last_two_lists(); - acc.print_table(); - - println!(); - - println!(" --- mismatching cases ---"); - - acc.new_list("let else _ mismatch"); - let_else!(&acc, 1, DroppyEnum::Some(_, _), build_droppy_enum_none); - acc.new_list("let else _v mismatch"); - let_else!(&acc, 1, DroppyEnum::Some(_, _v), build_droppy_enum_none); - acc.print_table(); - // This ensures that we always drop before visiting the else case - acc.assert_all_equal_to("drop,else"); - - acc.new_list("let else 0 mismatch"); - let_else!(&acc, 1, 0, build_droppy); - acc.new_list("let else 0 mismatch"); - let_else!(&acc, 1, 0, build_droppy); - acc.print_table(); - // This ensures that we always drop before visiting the else case - acc.assert_all_equal_to("drop,else"); -} diff --git a/src/test/ui/let-else/let-else-drop-order.run.stdout b/src/test/ui/let-else/let-else-drop-order.run.stdout deleted file mode 100644 index 01cf2f73e..000000000 --- a/src/test/ui/let-else/let-else-drop-order.run.stdout +++ /dev/null @@ -1,51 +0,0 @@ - --- matching cases --- - -| construct | let _ | let else _ | -| ------------ | --------- | ---------- | -| vanilla | drop,body | drop,body | -| & | body,drop | body,drop | -| &mut | body,drop | body,drop | -| move | drop,body | drop,body | -| fn(this) | drop,body | drop,body | -| tuple | n/a,n/a | drop,body | -| array | n/a,n/a | drop,body | -| ref & | body,drop | body,drop | -| ref mut &mut | body,drop | body,drop | - -| construct | let _v | let else _v | -| ------------ | --------- | ----------- | -| vanilla | drop,body | drop,body | -| & | body,drop | body,drop | -| &mut | body,drop | body,drop | -| move | drop,body | drop,body | -| fn(this) | drop,body | drop,body | -| tuple | n/a,n/a | drop,body | -| array | n/a,n/a | drop,body | -| ref & | body,drop | body,drop | -| ref mut &mut | body,drop | body,drop | - - --- mismatching cases --- - -| construct | let else _ mismatch | let else _v mismatch | -| ------------ | ------------------- | -------------------- | -| vanilla | drop,else | drop,else | -| & | drop,else | drop,else | -| &mut | drop,else | drop,else | -| move | drop,else | drop,else | -| fn(this) | drop,else | drop,else | -| tuple | drop,else | drop,else | -| array | drop,else | drop,else | -| ref & | drop,else | drop,else | -| ref mut &mut | drop,else | drop,else | - -| construct | let else 0 mismatch | let else 0 mismatch | -| ------------ | ------------------- | ------------------- | -| vanilla | drop,else | drop,else | -| & | drop,else | drop,else | -| &mut | drop,else | drop,else | -| move | drop,else | drop,else | -| fn(this) | drop,else | drop,else | -| tuple | drop,else | drop,else | -| array | drop,else | drop,else | -| ref & | drop,else | drop,else | -| ref mut &mut | drop,else | drop,else | diff --git a/src/test/ui/let-else/let-else-if.rs b/src/test/ui/let-else/let-else-if.rs deleted file mode 100644 index e8c54ca7a..000000000 --- a/src/test/ui/let-else/let-else-if.rs +++ /dev/null @@ -1,8 +0,0 @@ -fn main() { - let Some(_) = Some(()) else if true { - //~^ ERROR conditional `else if` is not supported for `let...else` - return; - } else { - return; - }; -} diff --git a/src/test/ui/let-else/let-else-if.stderr b/src/test/ui/let-else/let-else-if.stderr deleted file mode 100644 index c63fd61c5..000000000 --- a/src/test/ui/let-else/let-else-if.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error: conditional `else if` is not supported for `let...else` - --> $DIR/let-else-if.rs:2:33 - | -LL | let Some(_) = Some(()) else if true { - | ^^ expected `{` - | -help: try placing this code inside a block - | -LL ~ let Some(_) = Some(()) else { if true { -LL | - ... -LL | return; -LL ~ } }; - | - -error: aborting due to previous error - diff --git a/src/test/ui/let-else/let-else-irrefutable.rs b/src/test/ui/let-else/let-else-irrefutable.rs deleted file mode 100644 index f4b338eb0..000000000 --- a/src/test/ui/let-else/let-else-irrefutable.rs +++ /dev/null @@ -1,11 +0,0 @@ -// check-pass - -fn main() { - let x = 1 else { return }; //~ WARN irrefutable `let...else` pattern - - // Multiline else blocks should not get printed - let x = 1 else { //~ WARN irrefutable `let...else` pattern - eprintln!("problem case encountered"); - return - }; -} diff --git a/src/test/ui/let-else/let-else-irrefutable.stderr b/src/test/ui/let-else/let-else-irrefutable.stderr deleted file mode 100644 index 73d4e5f34..000000000 --- a/src/test/ui/let-else/let-else-irrefutable.stderr +++ /dev/null @@ -1,21 +0,0 @@ -warning: irrefutable `let...else` pattern - --> $DIR/let-else-irrefutable.rs:4:5 - | -LL | let x = 1 else { return }; - | ^^^^^^^^^ - | - = note: this pattern will always match, so the `else` clause is useless - = help: consider removing the `else` clause - = note: `#[warn(irrefutable_let_patterns)]` on by default - -warning: irrefutable `let...else` pattern - --> $DIR/let-else-irrefutable.rs:7:5 - | -LL | let x = 1 else { - | ^^^^^^^^^ - | - = note: this pattern will always match, so the `else` clause is useless - = help: consider removing the `else` clause - -warning: 2 warnings emitted - diff --git a/src/test/ui/let-else/let-else-missing-semicolon.rs b/src/test/ui/let-else/let-else-missing-semicolon.rs deleted file mode 100644 index d87ac90c1..000000000 --- a/src/test/ui/let-else/let-else-missing-semicolon.rs +++ /dev/null @@ -1,9 +0,0 @@ -fn main() { - let Some(x) = Some(1) else { - return; - } //~ ERROR expected `;`, found keyword `let` - let _ = ""; - let Some(x) = Some(1) else { - panic!(); - } //~ ERROR expected `;`, found `}` -} diff --git a/src/test/ui/let-else/let-else-missing-semicolon.stderr b/src/test/ui/let-else/let-else-missing-semicolon.stderr deleted file mode 100644 index 99029ff33..000000000 --- a/src/test/ui/let-else/let-else-missing-semicolon.stderr +++ /dev/null @@ -1,18 +0,0 @@ -error: expected `;`, found keyword `let` - --> $DIR/let-else-missing-semicolon.rs:4:6 - | -LL | } - | ^ help: add `;` here -LL | let _ = ""; - | --- unexpected token - -error: expected `;`, found `}` - --> $DIR/let-else-missing-semicolon.rs:8:6 - | -LL | } - | ^ help: add `;` here -LL | } - | - unexpected token - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/let-else/let-else-no-double-error.rs b/src/test/ui/let-else/let-else-no-double-error.rs deleted file mode 100644 index 91fcc5d7e..000000000 --- a/src/test/ui/let-else/let-else-no-double-error.rs +++ /dev/null @@ -1,12 +0,0 @@ -// from rfc2005 test suite - - - -// Without caching type lookups in FnCtxt.resolve_ty_and_def_ufcs -// the error below would be reported twice (once when checking -// for a non-ref pattern, once when processing the pattern). - -fn main() { - let foo = 22; - let u32::XXX = foo else { return }; //~ ERROR: no associated item named `XXX` found for type `u32` in the current scope [E0599] -} diff --git a/src/test/ui/let-else/let-else-no-double-error.stderr b/src/test/ui/let-else/let-else-no-double-error.stderr deleted file mode 100644 index 941e588b1..000000000 --- a/src/test/ui/let-else/let-else-no-double-error.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0599]: no associated item named `XXX` found for type `u32` in the current scope - --> $DIR/let-else-no-double-error.rs:11:14 - | -LL | let u32::XXX = foo else { return }; - | ^^^ associated item not found in `u32` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0599`. diff --git a/src/test/ui/let-else/let-else-non-copy.rs b/src/test/ui/let-else/let-else-non-copy.rs deleted file mode 100644 index 08c07dd1a..000000000 --- a/src/test/ui/let-else/let-else-non-copy.rs +++ /dev/null @@ -1,45 +0,0 @@ -// run-pass -// -// This is derived from a change to compiler/rustc_codegen_llvm/src/debuginfo/metadata.rs, in -// preparation for adopting let-else within the compiler (thanks @est31): -// -// ``` -// - let place = if let mir::VarDebugInfoContents::Place(p) = var.value { p } else { continue }; -// + let mir::VarDebugInfoContents::Place(place) = var.value else { continue }; -// ``` -// -// The move was due to mir::Place being Copy, but mir::VarDebugInfoContents not being Copy. - - - -#[derive(Copy, Clone)] -struct Copyable; - -enum NonCopy { - Thing(Copyable), - #[allow(unused)] - Other, -} - -struct Wrapper { - field: NonCopy, -} - -fn let_else() { - let vec = vec![Wrapper { field: NonCopy::Thing(Copyable) }]; - for item in &vec { - let NonCopy::Thing(_copyable) = item.field else { continue }; - } -} - -fn if_let() { - let vec = vec![Wrapper { field: NonCopy::Thing(Copyable) }]; - for item in &vec { - let _copyable = if let NonCopy::Thing(copyable) = item.field { copyable } else { continue }; - } -} - -fn main() { - let_else(); - if_let(); -} diff --git a/src/test/ui/let-else/let-else-non-diverging.rs b/src/test/ui/let-else/let-else-non-diverging.rs deleted file mode 100644 index a5442dd82..000000000 --- a/src/test/ui/let-else/let-else-non-diverging.rs +++ /dev/null @@ -1,22 +0,0 @@ -fn main() { - let Some(x) = Some(1) else { //~ ERROR does not diverge - Some(2) - }; - let Some(x) = Some(1) else { //~ ERROR does not diverge - if 1 == 1 { - panic!(); - } - }; - let Some(x) = Some(1) else { Some(2) }; //~ ERROR does not diverge - - // Ensure that uninhabited types do not "diverge". - // This might be relaxed in the future, but when it is, - // it should be an explicitly wanted decision. - let Some(x) = Some(1) else { foo::() }; //~ ERROR does not diverge -} - -enum Uninhabited {} - -fn foo() -> T { - panic!() -} diff --git a/src/test/ui/let-else/let-else-non-diverging.stderr b/src/test/ui/let-else/let-else-non-diverging.stderr deleted file mode 100644 index 78551fcc4..000000000 --- a/src/test/ui/let-else/let-else-non-diverging.stderr +++ /dev/null @@ -1,55 +0,0 @@ -error[E0308]: `else` clause of `let...else` does not diverge - --> $DIR/let-else-non-diverging.rs:2:32 - | -LL | let Some(x) = Some(1) else { - | ________________________________^ -LL | | Some(2) -LL | | }; - | |_____^ expected `!`, found enum `Option` - | - = note: expected type `!` - found enum `Option<{integer}>` - = help: try adding a diverging expression, such as `return` or `panic!(..)` - = help: ...or use `match` instead of `let...else` - -error[E0308]: `else` clause of `let...else` does not diverge - --> $DIR/let-else-non-diverging.rs:5:32 - | -LL | let Some(x) = Some(1) else { - | ________________________________^ -LL | | if 1 == 1 { -LL | | panic!(); -LL | | } -LL | | }; - | |_____^ expected `!`, found `()` - | - = note: expected type `!` - found unit type `()` - = help: try adding a diverging expression, such as `return` or `panic!(..)` - = help: ...or use `match` instead of `let...else` - -error[E0308]: `else` clause of `let...else` does not diverge - --> $DIR/let-else-non-diverging.rs:10:32 - | -LL | let Some(x) = Some(1) else { Some(2) }; - | ^^^^^^^^^^^ expected `!`, found enum `Option` - | - = note: expected type `!` - found enum `Option<{integer}>` - = help: try adding a diverging expression, such as `return` or `panic!(..)` - = help: ...or use `match` instead of `let...else` - -error[E0308]: `else` clause of `let...else` does not diverge - --> $DIR/let-else-non-diverging.rs:15:32 - | -LL | let Some(x) = Some(1) else { foo::() }; - | ^^^^^^^^^^^^^^^^^^^^^^^^ expected `!`, found enum `Uninhabited` - | - = note: expected type `!` - found enum `Uninhabited` - = help: try adding a diverging expression, such as `return` or `panic!(..)` - = help: ...or use `match` instead of `let...else` - -error: aborting due to 4 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/let-else/let-else-ref-bindings-pass.rs b/src/test/ui/let-else/let-else-ref-bindings-pass.rs deleted file mode 100644 index 62fc65731..000000000 --- a/src/test/ui/let-else/let-else-ref-bindings-pass.rs +++ /dev/null @@ -1,71 +0,0 @@ -// check-pass - - -#![allow(unused_variables)] - -fn ref_() { - let bytes: Vec = b"Hello"[..].to_vec(); - let some = Some(bytes); - - let Some(ref a) = Some(()) else { return }; - - // | ref | type annotation | & | - // | --- | --------------- | - | - // | x | x | | error - // | x | x | x | error - // | | x | | error - // | | x | x | error - // | x | | | - let Some(ref a) = some else { return }; // OK - let b: &[u8] = a; - - // | x | | x | - let Some(ref a) = &some else { return }; // OK - let b: &[u8] = a; - - - // | | | x | - let Some(a) = &some else { return }; // OK - let b: &[u8] = a; - - let Some(a): Option<&[u8]> = some.as_deref() else { return }; // OK - let b: &[u8] = a; - let Some(ref a): Option<&[u8]> = some.as_deref() else { return }; // OK - let b: &[u8] = a; -} - -fn ref_mut() { - // This `ref mut` case had an ICE, see issue #89960 - let Some(ref mut a) = Some(()) else { return }; - - let bytes: Vec = b"Hello"[..].to_vec(); - let mut some = Some(bytes); - - // | ref mut | type annotation | &mut | - // | ------- | --------------- | ---- | - // | x | x | | error - // | x | x | x | error - // | | x | | error - // | | x | x | error - // | x | | | - let Some(ref mut a) = some else { return }; // OK - let b: &mut [u8] = a; - - // | x | | x | - let Some(ref mut a) = &mut some else { return }; // OK - let b: &mut [u8] = a; - - // | | | x | - let Some(a) = &mut some else { return }; // OK - let b: &mut [u8] = a; - - let Some(a): Option<&mut [u8]> = some.as_deref_mut() else { return }; // OK - let b: &mut [u8] = a; - let Some(ref mut a): Option<&mut [u8]> = some.as_deref_mut() else { return }; // OK - let b: &mut [u8] = a; -} - -fn main() { - ref_(); - ref_mut(); -} diff --git a/src/test/ui/let-else/let-else-ref-bindings.rs b/src/test/ui/let-else/let-else-ref-bindings.rs deleted file mode 100644 index 687e235d4..000000000 --- a/src/test/ui/let-else/let-else-ref-bindings.rs +++ /dev/null @@ -1,62 +0,0 @@ -#![allow(unused_variables)] - - -fn ref_() { - let bytes: Vec = b"Hello"[..].to_vec(); - let some = Some(bytes); - - let Some(ref a) = Some(()) else { return }; - - // | ref | type annotation | & | - // | --- | --------------- | - | - // | x | | | OK - // | x | | x | OK - // | | | x | OK - // | x | x | | - let Some(ref a): Option<&[u8]> = some else { return }; //~ ERROR mismatched types - let b: & [u8] = a; - - // | x | x | x | - let Some(ref a): Option<&[u8]> = &some else { return }; //~ ERROR mismatched types - let b: & [u8] = a; - - // | | x | | - let Some(a): Option<&[u8]> = some else { return }; //~ ERROR mismatched types - let b: &[u8] = a; - // | | x | x | - let Some(a): Option<&[u8]> = &some else { return }; //~ ERROR mismatched types - let b: &[u8] = a; -} - -fn ref_mut() { - // This `ref mut` case had an ICE, see issue #89960 - let Some(ref mut a) = Some(()) else { return }; - - let bytes: Vec = b"Hello"[..].to_vec(); - let mut some = Some(bytes); - - // | ref mut | type annotation | &mut | - // | ------- | --------------- | ---- | - // | x | | | OK - // | x | | x | OK - // | | | x | OK - // | x | x | | - let Some(ref mut a): Option<&mut [u8]> = some else { return }; //~ ERROR mismatched types - let b: &mut [u8] = a; - - // | x | x | x | (nope) - let Some(ref mut a): Option<&mut [u8]> = &mut some else { return }; //~ ERROR mismatched types - let b: &mut [u8] = a; - - // | | x | | - let Some(a): Option<&mut [u8]> = some else { return }; //~ ERROR mismatched types - let b: &mut [u8] = a; - // | | x | x | - let Some(a): Option<&mut [u8]> = &mut some else { return }; //~ ERROR mismatched types - let b: &mut [u8] = a; -} - -fn main() { - ref_(); - ref_mut(); -} diff --git a/src/test/ui/let-else/let-else-ref-bindings.stderr b/src/test/ui/let-else/let-else-ref-bindings.stderr deleted file mode 100644 index 56b9e0733..000000000 --- a/src/test/ui/let-else/let-else-ref-bindings.stderr +++ /dev/null @@ -1,83 +0,0 @@ -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:16:38 - | -LL | let Some(ref a): Option<&[u8]> = some else { return }; - | ^^^^ expected `&[u8]`, found struct `Vec` - | - = note: expected enum `Option<&[u8]>` - found enum `Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:20:38 - | -LL | let Some(ref a): Option<&[u8]> = &some else { return }; - | ^^^^^ expected enum `Option`, found `&Option>` - | - = note: expected enum `Option<&[u8]>` - found reference `&Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:24:34 - | -LL | let Some(a): Option<&[u8]> = some else { return }; - | ------------- ^^^^ expected `&[u8]`, found struct `Vec` - | | - | expected due to this - | - = note: expected enum `Option<&[u8]>` - found enum `Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:27:34 - | -LL | let Some(a): Option<&[u8]> = &some else { return }; - | ------------- ^^^^^ expected enum `Option`, found `&Option>` - | | - | expected due to this - | - = note: expected enum `Option<&[u8]>` - found reference `&Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:44:46 - | -LL | let Some(ref mut a): Option<&mut [u8]> = some else { return }; - | ^^^^ expected `&mut [u8]`, found struct `Vec` - | - = note: expected enum `Option<&mut [u8]>` - found enum `Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:48:46 - | -LL | let Some(ref mut a): Option<&mut [u8]> = &mut some else { return }; - | ^^^^^^^^^ expected enum `Option`, found mutable reference - | - = note: expected enum `Option<&mut [u8]>` - found mutable reference `&mut Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:52:38 - | -LL | let Some(a): Option<&mut [u8]> = some else { return }; - | ----------------- ^^^^ expected `&mut [u8]`, found struct `Vec` - | | - | expected due to this - | - = note: expected enum `Option<&mut [u8]>` - found enum `Option>` - -error[E0308]: mismatched types - --> $DIR/let-else-ref-bindings.rs:55:38 - | -LL | let Some(a): Option<&mut [u8]> = &mut some else { return }; - | ----------------- ^^^^^^^^^ expected enum `Option`, found mutable reference - | | - | expected due to this - | - = note: expected enum `Option<&mut [u8]>` - found mutable reference `&mut Option>` - -error: aborting due to 8 previous errors - -For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/let-else/let-else-run-pass.rs b/src/test/ui/let-else/let-else-run-pass.rs deleted file mode 100644 index a0fb6c683..000000000 --- a/src/test/ui/let-else/let-else-run-pass.rs +++ /dev/null @@ -1,35 +0,0 @@ -// run-pass - - - -fn main() { - #[allow(dead_code)] - enum MyEnum { - A(String), - B { f: String }, - C, - } - // ref binding to non-copy value and or-pattern - let (MyEnum::A(ref x) | MyEnum::B { f: ref x }) = (MyEnum::B { f: String::new() }) else { - panic!(); - }; - assert_eq!(x, ""); - - // nested let-else - let mut x = 1; - loop { - let 4 = x else { - let 3 = x else { - x += 1; - continue; - }; - break; - }; - panic!(); - } - assert_eq!(x, 3); - - // else return - let Some(1) = Some(2) else { return }; - panic!(); -} diff --git a/src/test/ui/let-else/let-else-scope.rs b/src/test/ui/let-else/let-else-scope.rs deleted file mode 100644 index 78a67769e..000000000 --- a/src/test/ui/let-else/let-else-scope.rs +++ /dev/null @@ -1,5 +0,0 @@ -fn main() { - let Some(x) = Some(2) else { - panic!("{}", x); //~ ERROR cannot find value `x` in this scope - }; -} diff --git a/src/test/ui/let-else/let-else-scope.stderr b/src/test/ui/let-else/let-else-scope.stderr deleted file mode 100644 index 3b4f09829..000000000 --- a/src/test/ui/let-else/let-else-scope.stderr +++ /dev/null @@ -1,9 +0,0 @@ -error[E0425]: cannot find value `x` in this scope - --> $DIR/let-else-scope.rs:3:22 - | -LL | panic!("{}", x); - | ^ not found in this scope - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0425`. diff --git a/src/test/ui/let-else/let-else-slicing-error.rs b/src/test/ui/let-else/let-else-slicing-error.rs deleted file mode 100644 index 25770094b..000000000 --- a/src/test/ui/let-else/let-else-slicing-error.rs +++ /dev/null @@ -1,9 +0,0 @@ -// issue #92069 - - -fn main() { - let nums = vec![5, 4, 3, 2, 1]; - let [x, y] = nums else { //~ ERROR expected an array or slice - return; - }; -} diff --git a/src/test/ui/let-else/let-else-slicing-error.stderr b/src/test/ui/let-else/let-else-slicing-error.stderr deleted file mode 100644 index 064025e03..000000000 --- a/src/test/ui/let-else/let-else-slicing-error.stderr +++ /dev/null @@ -1,11 +0,0 @@ -error[E0529]: expected an array or slice, found `Vec<{integer}>` - --> $DIR/let-else-slicing-error.rs:6:9 - | -LL | let [x, y] = nums else { - | ^^^^^^ ---- help: consider slicing here: `nums[..]` - | | - | pattern cannot match with input type `Vec<{integer}>` - -error: aborting due to previous error - -For more information about this error, try `rustc --explain E0529`. diff --git a/src/test/ui/let-else/let-else-source-expr-nomove-pass.rs b/src/test/ui/let-else/let-else-source-expr-nomove-pass.rs deleted file mode 100644 index ee378abcf..000000000 --- a/src/test/ui/let-else/let-else-source-expr-nomove-pass.rs +++ /dev/null @@ -1,17 +0,0 @@ -// run-pass -// issue #89688 - - - -fn example_let_else(value: Option) { - let Some(inner) = value else { - println!("other: {:?}", value); // OK - return; - }; - println!("inner: {}", inner); -} - -fn main() { - example_let_else(Some("foo".into())); - example_let_else(None); -} diff --git a/src/test/ui/let-else/let-else-temp-borrowck.rs b/src/test/ui/let-else/let-else-temp-borrowck.rs deleted file mode 100644 index 6b4642d2f..000000000 --- a/src/test/ui/let-else/let-else-temp-borrowck.rs +++ /dev/null @@ -1,26 +0,0 @@ -// run-pass -// -// from issue #93951, where borrowck complained the temporary that `foo(&x)` was stored in was to -// be dropped sometime after `x` was. It then suggested adding a semicolon that was already there. - - -use std::fmt::Debug; - -fn foo<'a>(x: &'a str) -> Result { - Ok(x) -} - -fn let_else() { - let x = String::from("Hey"); - let Ok(_) = foo(&x) else { return }; -} - -fn if_let() { - let x = String::from("Hey"); - let _ = if let Ok(s) = foo(&x) { s } else { return }; -} - -fn main() { - let_else(); - if_let(); -} diff --git a/src/test/ui/let-else/let-else-temporary-lifetime.rs b/src/test/ui/let-else/let-else-temporary-lifetime.rs deleted file mode 100644 index c23eaa997..000000000 --- a/src/test/ui/let-else/let-else-temporary-lifetime.rs +++ /dev/null @@ -1,99 +0,0 @@ -// run-pass -// compile-flags: -Zvalidate-mir - -use std::fmt::Display; -use std::rc::Rc; -use std::sync::atomic::{AtomicU8, Ordering}; - -static TRACKER: AtomicU8 = AtomicU8::new(0); - -#[derive(Default)] -struct Droppy { - inner: u32, -} - -impl Drop for Droppy { - fn drop(&mut self) { - TRACKER.store(1, Ordering::Release); - println!("I've been dropped"); - } -} - -fn foo<'a>(x: &'a str) -> Result { - Ok(x) -} - -fn main() { - assert_eq!(TRACKER.load(Ordering::Acquire), 0); - let 0 = Droppy::default().inner else { return }; - assert_eq!(TRACKER.load(Ordering::Acquire), 1); - println!("Should have dropped 👆"); - - { - // cf. https://github.com/rust-lang/rust/pull/99518#issuecomment-1191520030 - struct Foo<'a>(&'a mut u32); - - impl<'a> Drop for Foo<'a> { - fn drop(&mut self) { - *self.0 = 0; - } - } - let mut foo = 0; - let Foo(0) = Foo(&mut foo) else { - *&mut foo = 1; - todo!() - }; - } - { - let x = String::from("Hey"); - - let Ok(s) = foo(&x) else { panic!() }; - assert_eq!(s.to_string(), x); - } - { - // test let-else drops temps after statement - let rc = Rc::new(0); - let 0 = *rc.clone() else { unreachable!() }; - Rc::try_unwrap(rc).unwrap(); - } - { - let mut rc = Rc::new(0); - let mut i = 0; - loop { - if i > 3 { - break; - } - let 1 = *rc.clone() else { - if let Ok(v) = Rc::try_unwrap(rc) { - rc = Rc::new(v); - } else { - panic!() - } - i += 1; - continue - }; - } - } - { - fn must_pass() { - let rc = Rc::new(()); - let &None = &Some(Rc::clone(&rc)) else { - Rc::try_unwrap(rc).unwrap(); - return; - }; - unreachable!(); - } - must_pass(); - } - { - // test let-else drops temps before else block - // NOTE: this test has to be the last block in the `main` - // body. - let rc = Rc::new(0); - let 1 = *rc.clone() else { - Rc::try_unwrap(rc).unwrap(); - return; - }; - unreachable!(); - } -} diff --git a/src/test/ui/let-else/let-else-then-diverge.rs b/src/test/ui/let-else/let-else-then-diverge.rs deleted file mode 100644 index 1a75310c9..000000000 --- a/src/test/ui/let-else/let-else-then-diverge.rs +++ /dev/null @@ -1,17 +0,0 @@ -// popped up in #94012, where an alternative desugaring was -// causing unreachable code errors - -#![deny(unused_variables)] -#![deny(unreachable_code)] - -fn let_else_diverge() -> bool { - let Some(_) = Some("test") else { - let x = 5; //~ ERROR unused variable: `x` - return false; - }; - return true; -} - -fn main() { - let_else_diverge(); -} diff --git a/src/test/ui/let-else/let-else-then-diverge.stderr b/src/test/ui/let-else/let-else-then-diverge.stderr deleted file mode 100644 index 470a11d47..000000000 --- a/src/test/ui/let-else/let-else-then-diverge.stderr +++ /dev/null @@ -1,14 +0,0 @@ -error: unused variable: `x` - --> $DIR/let-else-then-diverge.rs:9:13 - | -LL | let x = 5; - | ^ help: if this is intentional, prefix it with an underscore: `_x` - | -note: the lint level is defined here - --> $DIR/let-else-then-diverge.rs:4:9 - | -LL | #![deny(unused_variables)] - | ^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/let-else/let-else.rs b/src/test/ui/let-else/let-else.rs deleted file mode 100644 index 3505533e6..000000000 --- a/src/test/ui/let-else/let-else.rs +++ /dev/null @@ -1,8 +0,0 @@ -// run-pass - -fn main() { - let Some(x) = Some(1) else { - return; - }; - assert_eq!(x, 1); -} -- cgit v1.2.3