update crashes

This commit is contained in:
lcnr
2024-11-26 12:05:39 +01:00
parent d25ecfd5d6
commit fa66288a32
3 changed files with 89 additions and 15 deletions
-15
View File
@@ -1,15 +0,0 @@
//@ known-bug: rust-lang/rust#129444
//@ compile-flags: -Znext-solver=coherence
trait Trait {
type Assoc;
}
struct W<T: Trait>(*mut T);
impl<T: ?Trait> Trait for W<W<W<T>>> {}
trait NoOverlap {}
impl<T: Trait<W<T>>> NoOverlap for T {}
impl<T: Trait<Assoc = u32>> NoOverlap for W<T> {}
@@ -0,0 +1,20 @@
// A regression test for #129444. This previously ICE'd as
// computing the best obligation for one ambiguous obligation
// added spurious inference constraints which caused another
// candidate to pass.
trait Trait {
type Assoc;
}
struct W<T: Trait>(*mut T);
impl<T> Trait for W<W<W<T>>> {}
//~^ ERROR the trait bound `W<W<T>>: Trait` is not satisfied
//~| ERROR the trait bound `W<T>: Trait` is not satisfied
//~| ERROR the trait bound `T: Trait` is not satisfied
//~| ERROR not all trait items implemented, missing: `Assoc`
trait NoOverlap {}
impl<T: Trait> NoOverlap for T {}
impl<T: Trait<Assoc = u32>> NoOverlap for W<T> {}
//~^ ERROR conflicting implementations of trait `NoOverlap` for type `W<W<W<W<_>>>>`
fn main() {}
@@ -0,0 +1,69 @@
error[E0277]: the trait bound `W<W<T>>: Trait` is not satisfied
--> $DIR/best-obligation-ICE.rs:10:19
|
LL | impl<T> Trait for W<W<W<T>>> {}
| ^^^^^^^^^^ the trait `Trait` is not implemented for `W<W<T>>`
|
note: required by a bound in `W`
--> $DIR/best-obligation-ICE.rs:9:13
|
LL | struct W<T: Trait>(*mut T);
| ^^^^^ required by this bound in `W`
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
LL | impl<T> Trait for W<W<W<T>>> where W<W<T>>: Trait {}
| ++++++++++++++++++++
error[E0277]: the trait bound `W<T>: Trait` is not satisfied
--> $DIR/best-obligation-ICE.rs:10:19
|
LL | impl<T> Trait for W<W<W<T>>> {}
| ^^^^^^^^^^ the trait `Trait` is not implemented for `W<T>`
|
note: required by a bound in `W`
--> $DIR/best-obligation-ICE.rs:9:13
|
LL | struct W<T: Trait>(*mut T);
| ^^^^^ required by this bound in `W`
help: consider introducing a `where` clause, but there might be an alternative better way to express this requirement
|
LL | impl<T> Trait for W<W<W<T>>> where W<T>: Trait {}
| +++++++++++++++++
error[E0277]: the trait bound `T: Trait` is not satisfied
--> $DIR/best-obligation-ICE.rs:10:19
|
LL | impl<T> Trait for W<W<W<T>>> {}
| ^^^^^^^^^^ the trait `Trait` is not implemented for `T`
|
note: required by a bound in `W`
--> $DIR/best-obligation-ICE.rs:9:13
|
LL | struct W<T: Trait>(*mut T);
| ^^^^^ required by this bound in `W`
help: consider restricting type parameter `T`
|
LL | impl<T: Trait> Trait for W<W<W<T>>> {}
| +++++++
error[E0046]: not all trait items implemented, missing: `Assoc`
--> $DIR/best-obligation-ICE.rs:10:1
|
LL | type Assoc;
| ---------- `Assoc` from trait
...
LL | impl<T> Trait for W<W<W<T>>> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ missing `Assoc` in implementation
error[E0119]: conflicting implementations of trait `NoOverlap` for type `W<W<W<W<_>>>>`
--> $DIR/best-obligation-ICE.rs:18:1
|
LL | impl<T: Trait> NoOverlap for T {}
| ------------------------------ first implementation here
LL | impl<T: Trait<Assoc = u32>> NoOverlap for W<T> {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `W<W<W<W<_>>>>`
error: aborting due to 5 previous errors
Some errors have detailed explanations: E0046, E0119, E0277.
For more information about an error, try `rustc --explain E0046`.