mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-26 00:34:06 +00:00
c63b6a437e
My type ascription Oh rip it out Ah If you think we live too much then You can sacrifice diagnostics Don't mix your garbage Into my syntax So many weird hacks keep diagnostics alive Yet I don't even step outside So many bad diagnostics keep tyasc alive Yet tyasc doesn't even bother to survive!
34 lines
1.1 KiB
Rust
34 lines
1.1 KiB
Rust
// Test some cases where or-patterns may ostensibly be allowed but are in fact not.
|
|
// This is not a semantic test. We only test parsing.
|
|
|
|
fn main() {}
|
|
|
|
enum E { A, B }
|
|
use E::*;
|
|
|
|
fn no_top_level_or_patterns() {
|
|
// We do *not* allow or-patterns at the top level of lambdas...
|
|
let _ = |A | B: E| ();
|
|
//~^ ERROR expected identifier, found
|
|
// -------- This looks like an or-pattern but is in fact `|A| (B: E | ())`.
|
|
}
|
|
|
|
fn no_top_level_or_patterns_2() {
|
|
// ...and for now neither do we allow or-patterns at the top level of functions.
|
|
fn fun1(A | B: E) {}
|
|
//~^ ERROR top-level or-patterns are not allowed
|
|
|
|
fn fun2(| A | B: E) {}
|
|
//~^ ERROR top-level or-patterns are not allowed
|
|
|
|
// We don't allow top-level or-patterns before type annotation in let-statements because we
|
|
// want to reserve this syntactic space for possible future type ascription.
|
|
let A | B: E = A;
|
|
//~^ ERROR top-level or-patterns are not allowed
|
|
|
|
let | A | B: E = A;
|
|
//~^ ERROR top-level or-patterns are not allowed
|
|
|
|
let (A | B): E = A; // ok -- wrapped in parens
|
|
}
|