resolve: test binding mode consistency for or-patterns.
This commit is contained in:
parent
33317c7baa
commit
aa7a02b029
2 changed files with 98 additions and 0 deletions
26
src/test/ui/or-patterns/inconsistent-modes.rs
Normal file
26
src/test/ui/or-patterns/inconsistent-modes.rs
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
// This test ensures that or patterns require binding mode consistency across arms.
|
||||
|
||||
#![feature(or_patterns)]
|
||||
#![allow(incomplete_features, non_camel_case_types)]
|
||||
fn main() {
|
||||
// One level:
|
||||
let Ok(a) | Err(ref a): Result<&u8, u8> = Ok(&0);
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
let Ok(ref mut a) | Err(a): Result<u8, &mut u8> = Ok(0);
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
//~| ERROR mismatched types
|
||||
let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
//~| ERROR variable `b` is bound in inconsistent ways
|
||||
//~| ERROR mismatched types
|
||||
|
||||
// Two levels:
|
||||
let Ok(Ok(a) | Err(a)) | Err(ref a) = Err(0);
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
|
||||
// Three levels:
|
||||
let Ok([ Ok((Ok(ref a) | Err(a),)) | Err(a) ]) | Err(a) = Err(&1);
|
||||
//~^ ERROR variable `a` is bound in inconsistent ways
|
||||
}
|
||||
72
src/test/ui/or-patterns/inconsistent-modes.stderr
Normal file
72
src/test/ui/or-patterns/inconsistent-modes.stderr
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:7:25
|
||||
|
|
||||
LL | let Ok(a) | Err(ref a): Result<&u8, u8> = Ok(&0);
|
||||
| - ^ bound in different ways
|
||||
| |
|
||||
| first binding
|
||||
|
||||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:9:29
|
||||
|
|
||||
LL | let Ok(ref mut a) | Err(a): Result<u8, &mut u8> = Ok(0);
|
||||
| - ^ bound in different ways
|
||||
| |
|
||||
| first binding
|
||||
|
||||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:11:33
|
||||
|
|
||||
LL | let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
|
||||
| - first binding ^ bound in different ways
|
||||
|
||||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:14:39
|
||||
|
|
||||
LL | let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
|
||||
| - first binding ^ bound in different ways
|
||||
|
||||
error[E0409]: variable `b` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:14:46
|
||||
|
|
||||
LL | let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
|
||||
| - first binding ^ bound in different ways
|
||||
|
||||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:20:38
|
||||
|
|
||||
LL | let Ok(Ok(a) | Err(a)) | Err(ref a) = Err(0);
|
||||
| - ^ bound in different ways
|
||||
| |
|
||||
| first binding
|
||||
|
||||
error[E0409]: variable `a` is bound in inconsistent ways within the same match arm
|
||||
--> $DIR/inconsistent-modes.rs:24:34
|
||||
|
|
||||
LL | let Ok([ Ok((Ok(ref a) | Err(a),)) | Err(a) ]) | Err(a) = Err(&1);
|
||||
| - ^ bound in different ways
|
||||
| |
|
||||
| first binding
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/inconsistent-modes.rs:11:25
|
||||
|
|
||||
LL | let Ok(ref a) | Err(ref mut a): Result<&u8, &mut u8> = Ok(&0);
|
||||
| ^^^^^^^^^ types differ in mutability
|
||||
|
|
||||
= note: expected type `&&u8`
|
||||
found type `&mut &mut u8`
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/inconsistent-modes.rs:14:31
|
||||
|
|
||||
LL | let Ok((ref a, b)) | Err((ref mut a, ref b)) = Ok((0, &0));
|
||||
| ^^^^^^^^^ types differ in mutability
|
||||
|
|
||||
= note: expected type `&{integer}`
|
||||
found type `&mut _`
|
||||
|
||||
error: aborting due to 9 previous errors
|
||||
|
||||
Some errors have detailed explanations: E0308, E0409.
|
||||
For more information about an error, try `rustc --explain E0308`.
|
||||
Loading…
Add table
Add a link
Reference in a new issue