resolve: add test for missing bindings in or-patterns.
This commit is contained in:
parent
896a1c7fcd
commit
33317c7baa
82
src/test/ui/or-patterns/missing-bindings.rs
Normal file
82
src/test/ui/or-patterns/missing-bindings.rs
Normal file
@ -0,0 +1,82 @@
|
||||
// This test ensures that or patterns do not allow missing bindings in any of the arms.
|
||||
|
||||
// edition:2018
|
||||
|
||||
#![feature(or_patterns)]
|
||||
#![allow(incomplete_features, non_camel_case_types)]
|
||||
|
||||
fn main() {}
|
||||
|
||||
fn check_handling_of_paths() {
|
||||
mod bar {
|
||||
pub enum foo {
|
||||
alpha,
|
||||
beta,
|
||||
charlie
|
||||
}
|
||||
}
|
||||
|
||||
use bar::foo::{alpha, charlie};
|
||||
let alpha | beta | charlie = alpha; //~ ERROR variable `beta` is not bound in all patterns
|
||||
match Some(alpha) {
|
||||
Some(alpha | beta) => {} //~ ERROR variable `beta` is not bound in all patterns
|
||||
}
|
||||
}
|
||||
|
||||
fn check_misc_nesting() {
|
||||
enum E<T> { A(T, T), B(T) }
|
||||
use E::*;
|
||||
enum Vars3<S, T, U> { V1(S), V2(T), V3(U) }
|
||||
use Vars3::*;
|
||||
|
||||
// One level:
|
||||
const X: E<u8> = B(0);
|
||||
let A(a, _) | _ = X; //~ ERROR variable `a` is not bound in all patterns
|
||||
let _ | B(a) = X; //~ ERROR variable `a` is not bound in all patterns
|
||||
let A(..) | B(a) = X; //~ ERROR variable `a` is not bound in all patterns
|
||||
let A(a, _) | B(_) = X; //~ ERROR variable `a` is not bound in all patterns
|
||||
let A(_, a) | B(_) = X; //~ ERROR variable `a` is not bound in all patterns
|
||||
let A(a, b) | B(a) = X; //~ ERROR variable `b` is not bound in all patterns
|
||||
|
||||
// Two levels:
|
||||
const Y: E<E<u8>> = B(B(0));
|
||||
let A(A(..) | B(_), _) | B(a) = Y; //~ ERROR variable `a` is not bound in all patterns
|
||||
let A(A(..) | B(a), _) | B(A(a, _) | B(a)) = Y;
|
||||
//~^ ERROR variable `a` is not bound in all patterns
|
||||
let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
//~^ ERROR variable `a` is not bound in all patterns
|
||||
//~| ERROR variable `a` is not bound in all patterns
|
||||
//~| ERROR variable `b` is not bound in all patterns
|
||||
//~| ERROR variable `b` is not bound in all patterns
|
||||
//~| ERROR variable `c` is not bound in all patterns
|
||||
//~| ERROR variable `c` is not bound in all patterns
|
||||
//~| ERROR variable `d` is not bound in all patterns
|
||||
//~| ERROR variable `e` is not bound in all patterns
|
||||
|
||||
// Three levels:
|
||||
let (
|
||||
V1(
|
||||
//~^ ERROR variable `b` is not bound in all patterns
|
||||
//~| ERROR variable `c` is not bound in all patterns
|
||||
A(
|
||||
Ok(a) | Err(_), //~ ERROR variable `a` is not bound in all patterns
|
||||
_
|
||||
) |
|
||||
B(Ok(a) | Err(a))
|
||||
) |
|
||||
V2(
|
||||
A(
|
||||
A(_, a) | //~ ERROR variable `b` is not bound in all patterns
|
||||
B(b), //~ ERROR variable `a` is not bound in all patterns
|
||||
_
|
||||
) |
|
||||
B(_)
|
||||
//~^ ERROR variable `a` is not bound in all patterns
|
||||
//~| ERROR variable `b` is not bound in all patterns
|
||||
) |
|
||||
V3(c),
|
||||
//~^ ERROR variable `a` is not bound in all patterns
|
||||
)
|
||||
: (Vars3<E<Result<u8, u8>>, E<E<u8>>, u8>,)
|
||||
= (V3(0),);
|
||||
}
|
242
src/test/ui/or-patterns/missing-bindings.stderr
Normal file
242
src/test/ui/or-patterns/missing-bindings.stderr
Normal file
@ -0,0 +1,242 @@
|
||||
error[E0408]: variable `beta` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:20:9
|
||||
|
|
||||
LL | let alpha | beta | charlie = alpha;
|
||||
| ^^^^^ ---- ^^^^^^^ pattern doesn't bind `beta`
|
||||
| | |
|
||||
| | variable not in all patterns
|
||||
| pattern doesn't bind `beta`
|
||||
|
||||
error[E0408]: variable `beta` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:22:14
|
||||
|
|
||||
LL | Some(alpha | beta) => {}
|
||||
| ^^^^^ ---- variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `beta`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:34:19
|
||||
|
|
||||
LL | let A(a, _) | _ = X;
|
||||
| - ^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:35:9
|
||||
|
|
||||
LL | let _ | B(a) = X;
|
||||
| ^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:36:9
|
||||
|
|
||||
LL | let A(..) | B(a) = X;
|
||||
| ^^^^^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:37:19
|
||||
|
|
||||
LL | let A(a, _) | B(_) = X;
|
||||
| - ^^^^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:38:19
|
||||
|
|
||||
LL | let A(_, a) | B(_) = X;
|
||||
| - ^^^^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:39:19
|
||||
|
|
||||
LL | let A(a, b) | B(a) = X;
|
||||
| - ^^^^ pattern doesn't bind `b`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:43:9
|
||||
|
|
||||
LL | let A(A(..) | B(_), _) | B(a) = Y;
|
||||
| ^^^^^^^^^^^^^^^^^^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:44:11
|
||||
|
|
||||
LL | let A(A(..) | B(a), _) | B(A(a, _) | B(a)) = Y;
|
||||
| ^^^^^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:21
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:21
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `b`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `c` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:11
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| ^^^^^^^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `c`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:32
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:32
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `b`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `c` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:32
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `c`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `d` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:32
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| - ^^^^ pattern doesn't bind `d`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `e` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:46:9
|
||||
|
|
||||
LL | let A(A(a, b) | B(c), d) | B(e) = Y;
|
||||
| ^^^^^^^^^^^^^^^^^^^^ - variable not in all patterns
|
||||
| |
|
||||
| pattern doesn't bind `e`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:62:29
|
||||
|
|
||||
LL | Ok(a) | Err(_),
|
||||
| - ^^^^^^ pattern doesn't bind `a`
|
||||
| |
|
||||
| variable not in all patterns
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:70:21
|
||||
|
|
||||
LL | A(_, a) |
|
||||
| - variable not in all patterns
|
||||
LL | B(b),
|
||||
| ^^^^ pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:69:21
|
||||
|
|
||||
LL | A(_, a) |
|
||||
| ^^^^^^^ pattern doesn't bind `b`
|
||||
LL | B(b),
|
||||
| - variable not in all patterns
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:73:17
|
||||
|
|
||||
LL | A(_, a) |
|
||||
| - variable not in all patterns
|
||||
...
|
||||
LL | B(_)
|
||||
| ^^^^ pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:73:17
|
||||
|
|
||||
LL | B(b),
|
||||
| - variable not in all patterns
|
||||
...
|
||||
LL | B(_)
|
||||
| ^^^^ pattern doesn't bind `b`
|
||||
|
||||
error[E0408]: variable `a` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:77:13
|
||||
|
|
||||
LL | B(Ok(a) | Err(a))
|
||||
| - variable not in all patterns
|
||||
...
|
||||
LL | A(_, a) |
|
||||
| - variable not in all patterns
|
||||
...
|
||||
LL | V3(c),
|
||||
| ^^^^^ pattern doesn't bind `a`
|
||||
|
||||
error[E0408]: variable `b` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:58:13
|
||||
|
|
||||
LL | / V1(
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | A(
|
||||
... |
|
||||
LL | | B(Ok(a) | Err(a))
|
||||
LL | | ) |
|
||||
| |_____________^ pattern doesn't bind `b`
|
||||
...
|
||||
LL | B(b),
|
||||
| - variable not in all patterns
|
||||
...
|
||||
LL | V3(c),
|
||||
| ^^^^^ pattern doesn't bind `b`
|
||||
|
||||
error[E0408]: variable `c` is not bound in all patterns
|
||||
--> $DIR/missing-bindings.rs:58:13
|
||||
|
|
||||
LL | / V1(
|
||||
LL | |
|
||||
LL | |
|
||||
LL | | A(
|
||||
... |
|
||||
LL | | B(Ok(a) | Err(a))
|
||||
LL | | ) |
|
||||
| |_____________^ pattern doesn't bind `c`
|
||||
LL | / V2(
|
||||
LL | | A(
|
||||
LL | | A(_, a) |
|
||||
LL | | B(b),
|
||||
... |
|
||||
LL | |
|
||||
LL | | ) |
|
||||
| |_____________^ pattern doesn't bind `c`
|
||||
LL | V3(c),
|
||||
| - variable not in all patterns
|
||||
|
||||
error: aborting due to 26 previous errors
|
||||
|
||||
For more information about this error, try `rustc --explain E0408`.
|
Loading…
x
Reference in New Issue
Block a user