summaryrefslogtreecommitdiffstats
path: root/tests/ui/destructuring-assignment
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/destructuring-assignment')
-rw-r--r--tests/ui/destructuring-assignment/bad-expr-lhs.rs2
-rw-r--r--tests/ui/destructuring-assignment/bad-expr-lhs.stderr10
-rw-r--r--tests/ui/destructuring-assignment/default-match-bindings-forbidden.stderr2
-rw-r--r--tests/ui/destructuring-assignment/non-exhaustive-destructure.rs4
-rw-r--r--tests/ui/destructuring-assignment/non-exhaustive-destructure.stderr17
-rw-r--r--tests/ui/destructuring-assignment/struct-or-enum-variant-path.rs6
6 files changed, 29 insertions, 12 deletions
diff --git a/tests/ui/destructuring-assignment/bad-expr-lhs.rs b/tests/ui/destructuring-assignment/bad-expr-lhs.rs
index 53794783a..90e1ac199 100644
--- a/tests/ui/destructuring-assignment/bad-expr-lhs.rs
+++ b/tests/ui/destructuring-assignment/bad-expr-lhs.rs
@@ -4,6 +4,4 @@ fn main() {
(1, 2) = (3, 4);
//~^ ERROR invalid left-hand side of assignment
//~| ERROR invalid left-hand side of assignment
-
- None = Some(3); //~ ERROR invalid left-hand side of assignment
}
diff --git a/tests/ui/destructuring-assignment/bad-expr-lhs.stderr b/tests/ui/destructuring-assignment/bad-expr-lhs.stderr
index d29867474..2916d6d9f 100644
--- a/tests/ui/destructuring-assignment/bad-expr-lhs.stderr
+++ b/tests/ui/destructuring-assignment/bad-expr-lhs.stderr
@@ -30,15 +30,7 @@ LL | (1, 2) = (3, 4);
| |
| cannot assign to this expression
-error[E0070]: invalid left-hand side of assignment
- --> $DIR/bad-expr-lhs.rs:8:10
- |
-LL | None = Some(3);
- | ---- ^
- | |
- | cannot assign to this expression
-
-error: aborting due to 5 previous errors
+error: aborting due to 4 previous errors
Some errors have detailed explanations: E0067, E0070.
For more information about an error, try `rustc --explain E0067`.
diff --git a/tests/ui/destructuring-assignment/default-match-bindings-forbidden.stderr b/tests/ui/destructuring-assignment/default-match-bindings-forbidden.stderr
index b285ee1f3..b0231d91b 100644
--- a/tests/ui/destructuring-assignment/default-match-bindings-forbidden.stderr
+++ b/tests/ui/destructuring-assignment/default-match-bindings-forbidden.stderr
@@ -9,6 +9,6 @@ LL | (x, y) = &(1, 2);
= note: expected reference `&({integer}, {integer})`
found tuple `(_, _)`
-error: aborting due to previous error
+error: aborting due to 1 previous error
For more information about this error, try `rustc --explain E0308`.
diff --git a/tests/ui/destructuring-assignment/non-exhaustive-destructure.rs b/tests/ui/destructuring-assignment/non-exhaustive-destructure.rs
new file mode 100644
index 000000000..39939f2ba
--- /dev/null
+++ b/tests/ui/destructuring-assignment/non-exhaustive-destructure.rs
@@ -0,0 +1,4 @@
+fn main() {
+ None = Some(3);
+ //~^ ERROR refutable pattern in local binding
+}
diff --git a/tests/ui/destructuring-assignment/non-exhaustive-destructure.stderr b/tests/ui/destructuring-assignment/non-exhaustive-destructure.stderr
new file mode 100644
index 000000000..b9ceaa4af
--- /dev/null
+++ b/tests/ui/destructuring-assignment/non-exhaustive-destructure.stderr
@@ -0,0 +1,17 @@
+error[E0005]: refutable pattern in local binding
+ --> $DIR/non-exhaustive-destructure.rs:2:5
+ |
+LL | None = Some(3);
+ | ^^^^ pattern `Some(_)` not covered
+ |
+ = note: `let` bindings require an "irrefutable pattern", like a `struct` or an `enum` with only one variant
+ = note: for more information, visit https://doc.rust-lang.org/book/ch18-02-refutability.html
+ = note: the matched value is of type `Option<i32>`
+help: you might want to use `if let` to ignore the variant that isn't matched
+ |
+LL | if None = Some(3) { todo!() };
+ | ++ +++++++++++
+
+error: aborting due to 1 previous error
+
+For more information about this error, try `rustc --explain E0005`.
diff --git a/tests/ui/destructuring-assignment/struct-or-enum-variant-path.rs b/tests/ui/destructuring-assignment/struct-or-enum-variant-path.rs
index 8da7f90c5..f82e02998 100644
--- a/tests/ui/destructuring-assignment/struct-or-enum-variant-path.rs
+++ b/tests/ui/destructuring-assignment/struct-or-enum-variant-path.rs
@@ -11,17 +11,22 @@ type A = E;
fn main() {
let mut a;
+ S = S;
(S, a) = (S, ());
+ E::V = E::V;
(E::V, a) = (E::V, ());
+ <E>::V = E::V;
(<E>::V, a) = (E::V, ());
+ A::V = A::V;
(A::V, a) = (E::V, ());
}
impl S {
fn check() {
let a;
+ Self = S;
(Self, a) = (S, ());
}
}
@@ -29,6 +34,7 @@ impl S {
impl E {
fn check() {
let a;
+ Self::V = E::V;
(Self::V, a) = (E::V, ());
}
}