mirror of
				https://github.com/rust-lang/rust.git
				synced 2025-10-31 04:57:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			84 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| // 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),);
 | |
| }
 | 
