mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
update crashes
This commit is contained in:
@@ -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`.
|
||||
Reference in New Issue
Block a user