summaryrefslogtreecommitdiffstats
path: root/tests/ui/union
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-30 18:31:44 +0000
commitc23a457e72abe608715ac76f076f47dc42af07a5 (patch)
tree2772049aaf84b5c9d0ed12ec8d86812f7a7904b6 /tests/ui/union
parentReleasing progress-linux version 1.73.0+dfsg1-1~progress7.99u1. (diff)
downloadrustc-c23a457e72abe608715ac76f076f47dc42af07a5.tar.xz
rustc-c23a457e72abe608715ac76f076f47dc42af07a5.zip
Merging upstream version 1.74.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/ui/union')
-rw-r--r--tests/ui/union/projection-as-union-type-error-2.stderr5
-rw-r--r--tests/ui/union/projection-as-union-type-error.stderr6
-rw-r--r--tests/ui/union/unnamed-fields/restrict_anonymous_structs.rs37
-rw-r--r--tests/ui/union/unnamed-fields/restrict_anonymous_structs.stderr78
-rw-r--r--tests/ui/union/unnamed-fields/restrict_anonymous_unions.rs37
-rw-r--r--tests/ui/union/unnamed-fields/restrict_anonymous_unions.stderr78
6 files changed, 241 insertions, 0 deletions
diff --git a/tests/ui/union/projection-as-union-type-error-2.stderr b/tests/ui/union/projection-as-union-type-error-2.stderr
index bab226f27..21f4ea103 100644
--- a/tests/ui/union/projection-as-union-type-error-2.stderr
+++ b/tests/ui/union/projection-as-union-type-error-2.stderr
@@ -4,6 +4,11 @@ error[E0277]: the trait bound `u8: NotImplemented` is not satisfied
LL | a: <Foo as Identity>::Identity,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotImplemented` is not implemented for `u8`
|
+help: this trait has no implementations, consider adding one
+ --> $DIR/projection-as-union-type-error-2.rs:9:1
+ |
+LL | trait NotImplemented {}
+ | ^^^^^^^^^^^^^^^^^^^^
note: required for `u8` to implement `Identity`
--> $DIR/projection-as-union-type-error-2.rs:11:25
|
diff --git a/tests/ui/union/projection-as-union-type-error.stderr b/tests/ui/union/projection-as-union-type-error.stderr
index e4fbe9603..2b0241caf 100644
--- a/tests/ui/union/projection-as-union-type-error.stderr
+++ b/tests/ui/union/projection-as-union-type-error.stderr
@@ -3,6 +3,12 @@ error[E0277]: the trait bound `u8: Identity` is not satisfied
|
LL | a: <Foo as Identity>::Identity,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Identity` is not implemented for `u8`
+ |
+help: this trait has no implementations, consider adding one
+ --> $DIR/projection-as-union-type-error.rs:6:1
+ |
+LL | pub trait Identity {
+ | ^^^^^^^^^^^^^^^^^^
error: aborting due to previous error
diff --git a/tests/ui/union/unnamed-fields/restrict_anonymous_structs.rs b/tests/ui/union/unnamed-fields/restrict_anonymous_structs.rs
new file mode 100644
index 000000000..192bbba5a
--- /dev/null
+++ b/tests/ui/union/unnamed-fields/restrict_anonymous_structs.rs
@@ -0,0 +1,37 @@
+#![allow(incomplete_features)]
+#![feature(unnamed_fields)]
+
+struct F {
+ field: struct { field: u8 }, //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields
+ //~^ ERROR anonymous structs are unimplemented
+ _: struct { field: u8 },
+ //~^ ERROR anonymous structs are unimplemented
+}
+
+struct G {
+ _: (u8, u8), //~ ERROR unnamed fields can only have struct or union types
+}
+
+union H {
+ field: struct { field: u8 }, //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields
+ //~^ ERROR anonymous structs are unimplemented
+ _: struct { field: u8 },
+ //~^ ERROR anonymous structs are unimplemented
+}
+
+union I {
+ _: (u8, u8), //~ ERROR unnamed fields can only have struct or union types
+}
+
+enum K {
+ M {
+ _ : struct { field: u8 }, //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields
+ //~^ ERROR unnamed fields are not allowed outside of structs or unions
+ //~| ERROR anonymous structs are unimplemented
+ },
+ N {
+ _ : u8, //~ ERROR unnamed fields are not allowed outside of structs or unions
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/union/unnamed-fields/restrict_anonymous_structs.stderr b/tests/ui/union/unnamed-fields/restrict_anonymous_structs.stderr
new file mode 100644
index 000000000..fd731766c
--- /dev/null
+++ b/tests/ui/union/unnamed-fields/restrict_anonymous_structs.stderr
@@ -0,0 +1,78 @@
+error: anonymous structs are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_structs.rs:5:12
+ |
+LL | field: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here
+
+error: unnamed fields can only have struct or union types
+ --> $DIR/restrict_anonymous_structs.rs:12:5
+ |
+LL | _: (u8, u8),
+ | ^ -------- not a struct or union
+
+error: anonymous structs are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_structs.rs:16:12
+ |
+LL | field: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here
+
+error: unnamed fields can only have struct or union types
+ --> $DIR/restrict_anonymous_structs.rs:23:5
+ |
+LL | _: (u8, u8),
+ | ^ -------- not a struct or union
+
+error: unnamed fields are not allowed outside of structs or unions
+ --> $DIR/restrict_anonymous_structs.rs:28:9
+ |
+LL | _ : struct { field: u8 },
+ | -^^^^^^^^^^^^^^^^^^^^^^^
+ | |
+ | unnamed field declared here
+
+error: anonymous structs are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_structs.rs:28:13
+ |
+LL | _ : struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here
+
+error: unnamed fields are not allowed outside of structs or unions
+ --> $DIR/restrict_anonymous_structs.rs:33:9
+ |
+LL | _ : u8,
+ | -^^^^^
+ | |
+ | unnamed field declared here
+
+error: anonymous structs are unimplemented
+ --> $DIR/restrict_anonymous_structs.rs:5:12
+ |
+LL | field: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: anonymous structs are unimplemented
+ --> $DIR/restrict_anonymous_structs.rs:7:8
+ |
+LL | _: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: anonymous structs are unimplemented
+ --> $DIR/restrict_anonymous_structs.rs:16:12
+ |
+LL | field: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: anonymous structs are unimplemented
+ --> $DIR/restrict_anonymous_structs.rs:18:8
+ |
+LL | _: struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: anonymous structs are unimplemented
+ --> $DIR/restrict_anonymous_structs.rs:28:13
+ |
+LL | _ : struct { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 12 previous errors
+
diff --git a/tests/ui/union/unnamed-fields/restrict_anonymous_unions.rs b/tests/ui/union/unnamed-fields/restrict_anonymous_unions.rs
new file mode 100644
index 000000000..c69266089
--- /dev/null
+++ b/tests/ui/union/unnamed-fields/restrict_anonymous_unions.rs
@@ -0,0 +1,37 @@
+#![allow(incomplete_features)]
+#![feature(unnamed_fields)]
+
+struct F {
+ field: union { field: u8 }, //~ ERROR anonymous unions are not allowed outside of unnamed struct or union fields
+ //~^ ERROR anonymous unions are unimplemented
+ _: union { field: u8 },
+ //~^ ERROR anonymous unions are unimplemented
+}
+
+struct G {
+ _: (u8, u8), //~ ERROR unnamed fields can only have struct or union types
+}
+
+union H {
+ field: union { field: u8 }, //~ ERROR anonymous unions are not allowed outside of unnamed struct or union fields
+ //~^ ERROR anonymous unions are unimplemented
+ _: union { field: u8 },
+ //~^ ERROR anonymous unions are unimplemented
+}
+
+union I {
+ _: (u8, u8), //~ ERROR unnamed fields can only have struct or union types
+}
+
+enum K {
+ M {
+ _ : union { field: u8 }, //~ ERROR anonymous unions are not allowed outside of unnamed struct or union fields
+ //~^ ERROR unnamed fields are not allowed outside of structs or unions
+ //~| ERROR anonymous unions are unimplemented
+ },
+ N {
+ _ : u8, //~ ERROR unnamed fields are not allowed outside of structs or unions
+ }
+}
+
+fn main() {}
diff --git a/tests/ui/union/unnamed-fields/restrict_anonymous_unions.stderr b/tests/ui/union/unnamed-fields/restrict_anonymous_unions.stderr
new file mode 100644
index 000000000..c65cad775
--- /dev/null
+++ b/tests/ui/union/unnamed-fields/restrict_anonymous_unions.stderr
@@ -0,0 +1,78 @@
+error: anonymous unions are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_unions.rs:5:12
+ |
+LL | field: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^ anonymous union declared here
+
+error: unnamed fields can only have struct or union types
+ --> $DIR/restrict_anonymous_unions.rs:12:5
+ |
+LL | _: (u8, u8),
+ | ^ -------- not a struct or union
+
+error: anonymous unions are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_unions.rs:16:12
+ |
+LL | field: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^ anonymous union declared here
+
+error: unnamed fields can only have struct or union types
+ --> $DIR/restrict_anonymous_unions.rs:23:5
+ |
+LL | _: (u8, u8),
+ | ^ -------- not a struct or union
+
+error: unnamed fields are not allowed outside of structs or unions
+ --> $DIR/restrict_anonymous_unions.rs:28:9
+ |
+LL | _ : union { field: u8 },
+ | -^^^^^^^^^^^^^^^^^^^^^^
+ | |
+ | unnamed field declared here
+
+error: anonymous unions are not allowed outside of unnamed struct or union fields
+ --> $DIR/restrict_anonymous_unions.rs:28:13
+ |
+LL | _ : union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^ anonymous union declared here
+
+error: unnamed fields are not allowed outside of structs or unions
+ --> $DIR/restrict_anonymous_unions.rs:33:9
+ |
+LL | _ : u8,
+ | -^^^^^
+ | |
+ | unnamed field declared here
+
+error: anonymous unions are unimplemented
+ --> $DIR/restrict_anonymous_unions.rs:5:12
+ |
+LL | field: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: anonymous unions are unimplemented
+ --> $DIR/restrict_anonymous_unions.rs:7:8
+ |
+LL | _: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: anonymous unions are unimplemented
+ --> $DIR/restrict_anonymous_unions.rs:16:12
+ |
+LL | field: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: anonymous unions are unimplemented
+ --> $DIR/restrict_anonymous_unions.rs:18:8
+ |
+LL | _: union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: anonymous unions are unimplemented
+ --> $DIR/restrict_anonymous_unions.rs:28:13
+ |
+LL | _ : union { field: u8 },
+ | ^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to 12 previous errors
+