diff options
| author | lcnr <rust@lcnr.de> | 2024-11-26 12:05:39 +0100 | 
|---|---|---|
| committer | lcnr <rust@lcnr.de> | 2024-11-26 12:23:53 +0100 | 
| commit | fa66288a32bc202b4a12513d1961190025d2d576 (patch) | |
| tree | ca87343d8d30ebc3f12cd1555324817c3553dc1e | |
| parent | d25ecfd5d6d2c9fdc7c31e9a611bff77b8fd06df (diff) | |
| download | rust-fa66288a32bc202b4a12513d1961190025d2d576.tar.gz rust-fa66288a32bc202b4a12513d1961190025d2d576.zip  | |
update crashes
| -rw-r--r-- | tests/crashes/129444.rs | 15 | ||||
| -rw-r--r-- | tests/ui/coherence/fuzzing/best-obligation-ICE.rs | 20 | ||||
| -rw-r--r-- | tests/ui/coherence/fuzzing/best-obligation-ICE.stderr | 69 | 
3 files changed, 89 insertions, 15 deletions
diff --git a/tests/crashes/129444.rs b/tests/crashes/129444.rs deleted file mode 100644 index b1b547b5191..00000000000 --- a/tests/crashes/129444.rs +++ /dev/null @@ -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> {} diff --git a/tests/ui/coherence/fuzzing/best-obligation-ICE.rs b/tests/ui/coherence/fuzzing/best-obligation-ICE.rs new file mode 100644 index 00000000000..49f40b579d4 --- /dev/null +++ b/tests/ui/coherence/fuzzing/best-obligation-ICE.rs @@ -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() {} diff --git a/tests/ui/coherence/fuzzing/best-obligation-ICE.stderr b/tests/ui/coherence/fuzzing/best-obligation-ICE.stderr new file mode 100644 index 00000000000..88de8023f6d --- /dev/null +++ b/tests/ui/coherence/fuzzing/best-obligation-ICE.stderr @@ -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`.  | 
