| // This test ensures that the "already bound identifier in a product pattern" |
| // correctly accounts for or-patterns. |
| |
| #![feature(or_patterns)] |
| //~^ WARN the feature `or_patterns` is incomplete |
| |
| enum E<T> { A(T, T), B(T) } |
| |
| use E::*; |
| |
| fn main() { |
| let (a, a) = (0, 1); // Standard duplication without an or-pattern. |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| |
| let (a, A(a, _) | B(a)) = (0, A(1, 2)); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR identifier `a` is bound more than once in the same pattern |
| |
| let (A(a, _) | B(a), a) = (A(0, 1), 2); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| |
| let A(a, a) | B(a) = A(0, 1); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| |
| let B(a) | A(a, a) = A(0, 1); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| |
| match A(0, 1) { |
| B(a) | A(a, a) => {} // Let's ensure `match` has no funny business. |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| } |
| |
| let B(A(a, _) | B(a)) | A(a, A(a, _) | B(a)) = B(B(1)); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR mismatched types |
| |
| let B(_) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1)); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR variable `a` is not bound in all patterns |
| |
| let B(A(a, _) | B(a)) | A(A(a, _) | B(a), A(a, _) | B(a)) = B(B(1)); |
| //~^ ERROR identifier `a` is bound more than once in the same pattern |
| //~| ERROR identifier `a` is bound more than once in the same pattern |
| } |