Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add cache to AmbiguityCausesVisitor #135618

Merged
merged 3 commits into from
Jan 18, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
add test
Rate limit · GitHub

Whoa there!

You have exceeded a secondary rate limit.

Please wait a few minutes before you try again;
in some cases this may take up to an hour.

lcnr committed Jan 17, 2025
commit 0910173b3558b0ff7e9e160976618cbb55cb6149
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() {}
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`.
Loading