about summary refs log tree commit diff
path: root/tests/ui/union/union-fields-2.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ui/union/union-fields-2.rs')
-rw-r--r--tests/ui/union/union-fields-2.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/ui/union/union-fields-2.rs b/tests/ui/union/union-fields-2.rs
new file mode 100644
index 00000000000..e738b184703
--- /dev/null
+++ b/tests/ui/union/union-fields-2.rs
@@ -0,0 +1,26 @@
+// revisions: mirunsafeck thirunsafeck
+// [thirunsafeck]compile-flags: -Z thir-unsafeck
+
+union U {
+    a: u8,
+    b: u16,
+}
+
+fn main() {
+    let u = U {}; //~ ERROR union expressions should have exactly one field
+    let u = U { a: 0 }; // OK
+    let u = U { a: 0, b: 1 }; //~ ERROR union expressions should have exactly one field
+    let u = U { a: 0, b: 1, c: 2 }; //~ ERROR union expressions should have exactly one field
+                                    //~^ ERROR union `U` has no field named `c`
+    let u = U { ..u }; //~ ERROR union expressions should have exactly one field
+                       //~^ ERROR functional record update syntax requires a struct
+
+    let U {} = u; //~ ERROR union patterns should have exactly one field
+    let U { a } = u; // OK
+    let U { a, b } = u; //~ ERROR union patterns should have exactly one field
+    let U { a, b, c } = u; //~ ERROR union patterns should have exactly one field
+                           //~^ ERROR union `U` does not have a field named `c`
+    let U { .. } = u; //~ ERROR union patterns should have exactly one field
+                      //~^ ERROR `..` cannot be used in union patterns
+    let U { a, .. } = u; //~ ERROR `..` cannot be used in union patterns
+}