summaryrefslogtreecommitdiffstats
path: root/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs')
-rw-r--r--src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs b/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs
new file mode 100644
index 000000000..845f867d7
--- /dev/null
+++ b/src/test/ui/destructuring-assignment/tuple_struct_destructure_fail.rs
@@ -0,0 +1,44 @@
+struct TupleStruct<S, T>(S, T);
+
+enum Enum<S, T> {
+ SingleVariant(S, T)
+}
+
+type Alias<S> = Enum<S, isize>;
+
+trait Test {
+ fn test() -> TupleStruct<isize, isize> {
+ TupleStruct(0, 0)
+ }
+}
+
+impl Test for Alias<isize> {}
+
+fn test() -> TupleStruct<isize, isize> {
+ TupleStruct(0, 0)
+}
+
+fn main() {
+ let (mut a, mut b);
+ TupleStruct(a, .., b, ..) = TupleStruct(0, 1);
+ //~^ ERROR `..` can only be used once per tuple struct or variant pattern
+ Enum::SingleVariant(a, .., b, ..) = Enum::SingleVariant(0, 1);
+ //~^ ERROR `..` can only be used once per tuple struct or variant pattern
+
+ TupleStruct(a, a, b) = TupleStruct(1, 2);
+ //~^ ERROR this pattern has 3 fields, but the corresponding tuple struct has 2 fields
+ TupleStruct(_) = TupleStruct(1, 2);
+ //~^ ERROR this pattern has 1 field, but the corresponding tuple struct has 2 fields
+ Enum::SingleVariant(a, a, b) = Enum::SingleVariant(1, 2);
+ //~^ ERROR this pattern has 3 fields, but the corresponding tuple variant has 2 fields
+ Enum::SingleVariant(_) = Enum::SingleVariant(1, 2);
+ //~^ ERROR this pattern has 1 field, but the corresponding tuple variant has 2 fields
+
+ // Check if `test` is recognized as not a tuple struct but a function call:
+ test() = TupleStruct(0, 0);
+ //~^ ERROR invalid left-hand side of assignment
+ (test)() = TupleStruct(0, 0);
+ //~^ ERROR invalid left-hand side of assignment
+ <Alias::<isize> as Test>::test() = TupleStruct(0, 0);
+ //~^ ERROR invalid left-hand side of assignment
+}