// 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 { A(T, T), B(T) } use E::*; enum Vars3 { V1(S), V2(T), V3(U) } use Vars3::*; // One level: const X: E = 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> = 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>, u8>,) = (V3(0),); }