diff options
| author | Deadbeef <ent3rm4n@gmail.com> | 2022-07-10 13:31:58 +0000 |
|---|---|---|
| committer | Deadbeef <ent3rm4n@gmail.com> | 2022-07-12 10:20:55 +0000 |
| commit | e65214785d85a4e2c76141e14eb38a55f1fd21d1 (patch) | |
| tree | f143cf3af4639ea694bcd2e56e9ecca080b7c587 | |
| parent | 944c0e23b8e44782e5097a7265bd78d124b92523 (diff) | |
| download | rust-e65214785d85a4e2c76141e14eb38a55f1fd21d1.tar.gz rust-e65214785d85a4e2c76141e14eb38a55f1fd21d1.zip | |
add more tests
3 files changed, 122 insertions, 18 deletions
diff --git a/src/test/ui/repr/auxiliary/repr-transparent-non-exhaustive.rs b/src/test/ui/repr/auxiliary/repr-transparent-non-exhaustive.rs index b8ae5c2b729..4bf6b54fe07 100644 --- a/src/test/ui/repr/auxiliary/repr-transparent-non-exhaustive.rs +++ b/src/test/ui/repr/auxiliary/repr-transparent-non-exhaustive.rs @@ -5,6 +5,14 @@ pub struct Private { _priv: () } #[non_exhaustive] pub struct NonExhaustive {} +#[non_exhaustive] +pub enum NonExhaustiveEnum {} + +pub enum NonExhaustiveVariant { + #[non_exhaustive] + A, +} + pub struct ExternalIndirection<T> { pub x: T, } diff --git a/src/test/ui/repr/repr-transparent-non-exhaustive.rs b/src/test/ui/repr/repr-transparent-non-exhaustive.rs index 600caee8ba3..9ccd8610dad 100644 --- a/src/test/ui/repr/repr-transparent-non-exhaustive.rs +++ b/src/test/ui/repr/repr-transparent-non-exhaustive.rs @@ -3,7 +3,13 @@ // aux-build: repr-transparent-non-exhaustive.rs extern crate repr_transparent_non_exhaustive; -use repr_transparent_non_exhaustive::{Private, NonExhaustive, ExternalIndirection}; +use repr_transparent_non_exhaustive::{ + Private, + NonExhaustive, + NonExhaustiveEnum, + NonExhaustiveVariant, + ExternalIndirection, +}; pub struct InternalPrivate { _priv: (), @@ -38,22 +44,52 @@ pub struct T6(Sized, NonExhaustive); //~| WARN this was previously accepted by the compiler #[repr(transparent)] -pub struct T7(Sized, InternalIndirection<Private>); +pub struct T7(Sized, NonExhaustiveEnum); //~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types //~| WARN this was previously accepted by the compiler #[repr(transparent)] -pub struct T8(Sized, InternalIndirection<NonExhaustive>); +pub struct T8(Sized, NonExhaustiveVariant); //~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types //~| WARN this was previously accepted by the compiler #[repr(transparent)] -pub struct T9(Sized, ExternalIndirection<Private>); +pub struct T9(Sized, InternalIndirection<Private>); //~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types //~| WARN this was previously accepted by the compiler #[repr(transparent)] -pub struct T10(Sized, ExternalIndirection<NonExhaustive>); +pub struct T10(Sized, InternalIndirection<NonExhaustive>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T11(Sized, InternalIndirection<NonExhaustiveEnum>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T12(Sized, InternalIndirection<NonExhaustiveVariant>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T13(Sized, ExternalIndirection<Private>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T14(Sized, ExternalIndirection<NonExhaustive>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T15(Sized, ExternalIndirection<NonExhaustiveEnum>); +//~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types +//~| WARN this was previously accepted by the compiler + +#[repr(transparent)] +pub struct T16(Sized, ExternalIndirection<NonExhaustiveVariant>); //~^ ERROR zero-sized fields in repr(transparent) cannot contain external non-exhaustive types //~| WARN this was previously accepted by the compiler diff --git a/src/test/ui/repr/repr-transparent-non-exhaustive.stderr b/src/test/ui/repr/repr-transparent-non-exhaustive.stderr index 3e45b2ab22c..3b1e334a0cb 100644 --- a/src/test/ui/repr/repr-transparent-non-exhaustive.stderr +++ b/src/test/ui/repr/repr-transparent-non-exhaustive.stderr @@ -1,5 +1,5 @@ error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:31:22 + --> $DIR/repr-transparent-non-exhaustive.rs:37:22 | LL | pub struct T5(Sized, Private); | ^^^^^^^ @@ -14,7 +14,7 @@ LL | #![deny(repr_transparent_external_private_fields)] = note: this struct contains `Private`, which contains private fields, and makes it not a breaking change to become non-zero-sized in the future. error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:36:22 + --> $DIR/repr-transparent-non-exhaustive.rs:42:22 | LL | pub struct T6(Sized, NonExhaustive); | ^^^^^^^^^^^^^ @@ -24,9 +24,29 @@ LL | pub struct T6(Sized, NonExhaustive); = note: this struct contains `NonExhaustive`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:41:22 + --> $DIR/repr-transparent-non-exhaustive.rs:47:22 | -LL | pub struct T7(Sized, InternalIndirection<Private>); +LL | pub struct T7(Sized, NonExhaustiveEnum); + | ^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveEnum`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:52:22 + | +LL | pub struct T8(Sized, NonExhaustiveVariant); + | ^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveVariant`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:57:22 + | +LL | pub struct T9(Sized, InternalIndirection<Private>); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! @@ -34,34 +54,74 @@ LL | pub struct T7(Sized, InternalIndirection<Private>); = note: this struct contains `Private`, which contains private fields, and makes it not a breaking change to become non-zero-sized in the future. error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:46:22 + --> $DIR/repr-transparent-non-exhaustive.rs:62:23 | -LL | pub struct T8(Sized, InternalIndirection<NonExhaustive>); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | pub struct T10(Sized, InternalIndirection<NonExhaustive>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> = note: this struct contains `NonExhaustive`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:51:22 + --> $DIR/repr-transparent-non-exhaustive.rs:67:23 | -LL | pub struct T9(Sized, ExternalIndirection<Private>); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | pub struct T11(Sized, InternalIndirection<NonExhaustiveEnum>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveEnum`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:72:23 + | +LL | pub struct T12(Sized, InternalIndirection<NonExhaustiveVariant>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveVariant`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:77:23 + | +LL | pub struct T13(Sized, ExternalIndirection<Private>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> = note: this struct contains `Private`, which contains private fields, and makes it not a breaking change to become non-zero-sized in the future. error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types - --> $DIR/repr-transparent-non-exhaustive.rs:56:23 + --> $DIR/repr-transparent-non-exhaustive.rs:82:23 | -LL | pub struct T10(Sized, ExternalIndirection<NonExhaustive>); +LL | pub struct T14(Sized, ExternalIndirection<NonExhaustive>); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> = note: this struct contains `NonExhaustive`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. -error: aborting due to 6 previous errors +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:87:23 + | +LL | pub struct T15(Sized, ExternalIndirection<NonExhaustiveEnum>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveEnum`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: zero-sized fields in repr(transparent) cannot contain external non-exhaustive types + --> $DIR/repr-transparent-non-exhaustive.rs:92:23 + | +LL | pub struct T16(Sized, ExternalIndirection<NonExhaustiveVariant>); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #78586 <https://github.com/rust-lang/rust/issues/78586> + = note: this enum contains `NonExhaustiveVariant`, which is marked with `#[non_exhaustive]`, and makes it not a breaking change to become non-zero-sized in the future. + +error: aborting due to 12 previous errors |
