Add failing test for invalid projection as union field type

This commit is contained in:
Guillaume Gomez 2023-01-16 18:10:11 +01:00
parent 4653bbfaee
commit 6c63b9497d
4 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,20 @@
// Test to ensure that there is no ICE when normalizing a projection
// which is invalid (from <https://github.com/rust-lang/rust/pull/106938>).
#![crate_type = "lib"]
trait Identity {
type Identity;
}
trait NotImplemented {}
impl<T: NotImplemented> Identity for T {
type Identity = Self;
}
type Foo = u8;
union Bar {
a: <Foo as Identity>::Identity, //~ ERROR
b: u8,
}

View File

@ -0,0 +1,17 @@
error[E0277]: the trait bound `u8: NotImplemented` is not satisfied
--> $DIR/projection-as-union-type-error-2.rs:18:8
|
LL | a: <Foo as Identity>::Identity,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `NotImplemented` is not implemented for `u8`
|
note: required for `u8` to implement `Identity`
--> $DIR/projection-as-union-type-error-2.rs:11:25
|
LL | impl<T: NotImplemented> Identity for T {
| -------------- ^^^^^^^^ ^
| |
| unsatisfied trait bound introduced here
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.

View File

@ -0,0 +1,15 @@
// Test to ensure that there is no ICE when normalizing a projection
// which is invalid (from <https://github.com/rust-lang/rust/pull/106938>).
#![crate_type = "lib"]
pub trait Identity {
type Identity;
}
pub type Foo = u8;
pub union Bar {
a: <Foo as Identity>::Identity, //~ ERROR
b: u8,
}

View File

@ -0,0 +1,9 @@
error[E0277]: the trait bound `u8: Identity` is not satisfied
--> $DIR/projection-as-union-type-error.rs:13:9
|
LL | a: <Foo as Identity>::Identity,
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Identity` is not implemented for `u8`
error: aborting due to previous error
For more information about this error, try `rustc --explain E0277`.