]> git.lizzy.rs Git - rust.git/blob - tests/ui/destructuring-assignment/tuple_struct_destructure_fail.rs
Make `output_filenames` a real query
[rust.git] / tests / ui / destructuring-assignment / tuple_struct_destructure_fail.rs
1 struct TupleStruct<S, T>(S, T);
2
3 enum Enum<S, T> {
4     SingleVariant(S, T)
5 }
6
7 type Alias<S> = Enum<S, isize>;
8
9 trait Test {
10     fn test() -> TupleStruct<isize, isize> {
11         TupleStruct(0, 0)
12     }
13 }
14
15 impl Test for Alias<isize> {}
16
17 fn test() -> TupleStruct<isize, isize> {
18     TupleStruct(0, 0)
19 }
20
21 fn main() {
22     let (mut a, mut b);
23     TupleStruct(a, .., b, ..) = TupleStruct(0, 1);
24     //~^ ERROR `..` can only be used once per tuple struct or variant pattern
25     Enum::SingleVariant(a, .., b, ..) = Enum::SingleVariant(0, 1);
26     //~^ ERROR `..` can only be used once per tuple struct or variant pattern
27
28     TupleStruct(a, a, b) = TupleStruct(1, 2);
29     //~^ ERROR this pattern has 3 fields, but the corresponding tuple struct has 2 fields
30     TupleStruct(_) = TupleStruct(1, 2);
31     //~^ ERROR this pattern has 1 field, but the corresponding tuple struct has 2 fields
32     Enum::SingleVariant(a, a, b) = Enum::SingleVariant(1, 2);
33     //~^ ERROR this pattern has 3 fields, but the corresponding tuple variant has 2 fields
34     Enum::SingleVariant(_) = Enum::SingleVariant(1, 2);
35     //~^ ERROR this pattern has 1 field, but the corresponding tuple variant has 2 fields
36
37     // Check if `test` is recognized as not a tuple struct but a function call:
38     test() = TupleStruct(0, 0);
39     //~^ ERROR invalid left-hand side of assignment
40     (test)() = TupleStruct(0, 0);
41     //~^ ERROR invalid left-hand side of assignment
42     <Alias::<isize> as Test>::test() = TupleStruct(0, 0);
43     //~^ ERROR invalid left-hand side of assignment
44 }