diff options
| author | jedel1043 <jedel0124@gmail.com> | 2021-05-16 09:53:17 -0500 |
|---|---|---|
| committer | jedel1043 <jedel0124@gmail.com> | 2021-05-16 09:53:17 -0500 |
| commit | 8a1dd6918bb686a960ad5ced46a16b5b59668464 (patch) | |
| tree | 1c87ae9bf55950e168faf70db19b1a1b52c71655 | |
| parent | d4ad050ce5778a09566f6f9ec172565815d54604 (diff) | |
| download | rust-8a1dd6918bb686a960ad5ced46a16b5b59668464.tar.gz rust-8a1dd6918bb686a960ad5ced46a16b5b59668464.zip | |
Add test for restriction of anonymous types on validation
| -rw-r--r-- | src/test/ui/unnamed_fields/restrict_anonymous.rs | 52 | ||||
| -rw-r--r-- | src/test/ui/unnamed_fields/restrict_anonymous.stderr | 175 |
2 files changed, 227 insertions, 0 deletions
diff --git a/src/test/ui/unnamed_fields/restrict_anonymous.rs b/src/test/ui/unnamed_fields/restrict_anonymous.rs new file mode 100644 index 00000000000..99637d11053 --- /dev/null +++ b/src/test/ui/unnamed_fields/restrict_anonymous.rs @@ -0,0 +1,52 @@ +#![allow(incomplete_features)] +#![feature(unnamed_fields)] + +fn f() -> struct { field: u8 } {} //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields +//~^ ERROR anonymous structs are unimplemented + +fn f2(a: struct { field: u8 } ) {} //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields +//~^ ERROR anonymous structs are unimplemented + +union G { + field: struct { field: u8 } //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented +} +//~| ERROR unions may not contain fields that need dropping [E0740] + +struct H { _: u8 } // Should error after hir checks + +struct I(struct { field: u8 }, u8); //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields +//~^ ERROR anonymous structs are unimplemented + +enum J { + K(struct { field: u8 }), //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented + L { + _ : struct { field: u8 } //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous fields are not allowed outside of structs or unions + //~| ERROR anonymous structs are unimplemented + }, + M { + _ : u8 //~ ERROR anonymous fields are not allowed outside of structs or unions + } +} + +static M: union { field: u8 } = 0; //~ ERROR anonymous unions are not allowed outside of unnamed struct or union fields +//~^ ERROR anonymous unions are unimplemented + +type N = union { field: u8 }; //~ ERROR anonymous unions are not allowed outside of unnamed struct or union fields +//~^ ERROR anonymous unions are unimplemented + +fn main() { + const O: struct { field: u8 } = 0; //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented + + let p: [struct { field: u8 }; 1]; //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented + + let q: (struct { field: u8 }, u8); //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented + + let cl = || -> struct { field: u8 } {}; //~ ERROR anonymous structs are not allowed outside of unnamed struct or union fields + //~^ ERROR anonymous structs are unimplemented +} diff --git a/src/test/ui/unnamed_fields/restrict_anonymous.stderr b/src/test/ui/unnamed_fields/restrict_anonymous.stderr new file mode 100644 index 00000000000..efcf544fde4 --- /dev/null +++ b/src/test/ui/unnamed_fields/restrict_anonymous.stderr @@ -0,0 +1,175 @@ +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:4:11 + | +LL | fn f() -> struct { field: u8 } {} + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:7:10 + | +LL | fn f2(a: struct { field: u8 } ) {} + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:11:12 + | +LL | field: struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:18:10 + | +LL | struct I(struct { field: u8 }, u8); + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:22:7 + | +LL | K(struct { field: u8 }), + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous fields are not allowed outside of structs or unions + --> $DIR/restrict_anonymous.rs:25:9 + | +LL | _ : struct { field: u8 } + | -^^^^^^^^^^^^^^^^^^^^^^^ + | | + | anonymous field declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:25:13 + | +LL | _ : struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous fields are not allowed outside of structs or unions + --> $DIR/restrict_anonymous.rs:30:9 + | +LL | _ : u8 + | -^^^^^ + | | + | anonymous field declared here + +error: anonymous unions are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:34:11 + | +LL | static M: union { field: u8 } = 0; + | ^^^^^^^^^^^^^^^^^^^ anonymous union declared here + +error: anonymous unions are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:37:10 + | +LL | type N = union { field: u8 }; + | ^^^^^^^^^^^^^^^^^^^ anonymous union declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:41:14 + | +LL | const O: struct { field: u8 } = 0; + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:44:13 + | +LL | let p: [struct { field: u8 }; 1]; + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:47:13 + | +LL | let q: (struct { field: u8 }, u8); + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are not allowed outside of unnamed struct or union fields + --> $DIR/restrict_anonymous.rs:50:20 + | +LL | let cl = || -> struct { field: u8 } {}; + | ^^^^^^^^^^^^^^^^^^^^ anonymous struct declared here + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:4:11 + | +LL | fn f() -> struct { field: u8 } {} + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:7:10 + | +LL | fn f2(a: struct { field: u8 } ) {} + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:11:12 + | +LL | field: struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:18:10 + | +LL | struct I(struct { field: u8 }, u8); + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:22:7 + | +LL | K(struct { field: u8 }), + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:25:13 + | +LL | _ : struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous unions are unimplemented + --> $DIR/restrict_anonymous.rs:34:11 + | +LL | static M: union { field: u8 } = 0; + | ^^^^^^^^^^^^^^^^^^^ + +error: anonymous unions are unimplemented + --> $DIR/restrict_anonymous.rs:37:10 + | +LL | type N = union { field: u8 }; + | ^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:44:13 + | +LL | let p: [struct { field: u8 }; 1]; + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:47:13 + | +LL | let q: (struct { field: u8 }, u8); + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:50:20 + | +LL | let cl = || -> struct { field: u8 } {}; + | ^^^^^^^^^^^^^^^^^^^^ + +error: anonymous structs are unimplemented + --> $DIR/restrict_anonymous.rs:41:14 + | +LL | const O: struct { field: u8 } = 0; + | ^^^^^^^^^^^^^^^^^^^^ + +error[E0740]: unions may not contain fields that need dropping + --> $DIR/restrict_anonymous.rs:11:5 + | +LL | field: struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | +note: `std::mem::ManuallyDrop` can be used to wrap the type + --> $DIR/restrict_anonymous.rs:11:5 + | +LL | field: struct { field: u8 } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 27 previous errors + +For more information about this error, try `rustc --explain E0740`. |
