| // This test ensures that or patterns do not allow missing bindings in any of the arms. |
| |
| //@ edition:2018 |
| |
| #![allow(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 |
| //~^ ERROR: `beta` is named the same as one of the variants |
| match Some(alpha) { //~ ERROR `None` not covered |
| Some(alpha | beta) => {} //~ ERROR variable `beta` is not bound in all patterns |
| //~^ ERROR: `beta` is named the same as one of the variants |
| } |
| } |
| |
| 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),); |
| } |