forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Auto merge of rust-lang#135618 - lcnr:coherence-unknown, r=compiler-e…
…rrors add cache to `AmbiguityCausesVisitor` fixes rust-lang#135457, alternative to rust-lang#135524. cc https://rust-lang.zulipchat.com/#narrow/channel/364551-t-types.2Ftrait-system-refactor/topic/new-solver.20hang.20.23135457 r? `@compiler-errors`
- Loading branch information
Showing
5 changed files
with
115 additions
and
28 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.rs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// Computing the ambiguity causes for the overlap ended up | ||
// causing an exponential blowup when recursing into the normalization | ||
// goals for `<Box<?t> as RecursiveSuper>::Assoc`. This test | ||
// takes multiple minutes when doing so and less than a second | ||
// otherwise. | ||
|
||
//@ compile-flags: -Znext-solver=coherence | ||
|
||
trait RecursiveSuper: | ||
Super< | ||
A0 = Self::Assoc, | ||
A1 = Self::Assoc, | ||
A2 = Self::Assoc, | ||
A3 = Self::Assoc, | ||
A4 = Self::Assoc, | ||
A5 = Self::Assoc, | ||
A6 = Self::Assoc, | ||
A7 = Self::Assoc, | ||
A8 = Self::Assoc, | ||
A9 = Self::Assoc, | ||
A10 = Self::Assoc, | ||
A11 = Self::Assoc, | ||
A12 = Self::Assoc, | ||
A13 = Self::Assoc, | ||
A14 = Self::Assoc, | ||
A15 = Self::Assoc, | ||
> | ||
{ | ||
type Assoc; | ||
} | ||
|
||
trait Super { | ||
type A0; | ||
type A1; | ||
type A2; | ||
type A3; | ||
type A4; | ||
type A5; | ||
type A6; | ||
type A7; | ||
type A8; | ||
type A9; | ||
type A10; | ||
type A11; | ||
type A12; | ||
type A13; | ||
type A14; | ||
type A15; | ||
} | ||
|
||
trait Overlap {} | ||
impl<T: RecursiveSuper> Overlap for T {} | ||
impl<T> Overlap for Box<T> {} | ||
//~^ ERROR conflicting implementations of trait `Overlap` for type `Box<_>` | ||
|
||
fn main() {} |
14 changes: 14 additions & 0 deletions
14
tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.stderr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
error[E0119]: conflicting implementations of trait `Overlap` for type `Box<_>` | ||
--> $DIR/ambiguity-causes-visitor-hang.rs:53:1 | ||
| | ||
LL | impl<T: RecursiveSuper> Overlap for T {} | ||
| ------------------------------------- first implementation here | ||
LL | impl<T> Overlap for Box<T> {} | ||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Box<_>` | ||
| | ||
= note: downstream crates may implement trait `Super` for type `std::boxed::Box<_>` | ||
= note: downstream crates may implement trait `RecursiveSuper` for type `std::boxed::Box<_>` | ||
|
||
error: aborting due to 1 previous error | ||
|
||
For more information about this error, try `rustc --explain E0119`. |