Skip to content

Commit

Permalink
add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
fee1-dead committed Jul 10, 2022
1 parent fc26ca1 commit 5fb6784
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 18 deletions.
8 changes: 8 additions & 0 deletions src/test/ui/repr/auxiliary/repr-transparent-non-exhaustive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
}
46 changes: 41 additions & 5 deletions src/test/ui/repr/repr-transparent-non-exhaustive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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: (),
Expand Down Expand Up @@ -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

Expand Down
86 changes: 73 additions & 13 deletions src/test/ui/repr/repr-transparent-non-exhaustive.stderr
Original file line number Diff line number Diff line change
@@ -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);
| ^^^^^^^
Expand All @@ -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);
| ^^^^^^^^^^^^^
Expand All @@ -24,44 +24,104 @@ 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!
= 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: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

0 comments on commit 5fb6784

Please sign in to comment.