Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit 0910173

Browse files
committedJan 17, 2025
add test
1 parent 94bf8f0 commit 0910173

File tree

2 files changed

+70
-0
lines changed

2 files changed

+70
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// Computing the ambiguity causes for the overlap ended up
2+
// causing an exponential blowup when recursing into the normalization
3+
// goals for `<Box<?t> as RecursiveSuper>::Assoc`. This test
4+
// takes multiple minutes when doing so and less than a second
5+
// otherwise.
6+
7+
//@ compile-flags: -Znext-solver=coherence
8+
9+
trait RecursiveSuper:
10+
Super<
11+
A0 = Self::Assoc,
12+
A1 = Self::Assoc,
13+
A2 = Self::Assoc,
14+
A3 = Self::Assoc,
15+
A4 = Self::Assoc,
16+
A5 = Self::Assoc,
17+
A6 = Self::Assoc,
18+
A7 = Self::Assoc,
19+
A8 = Self::Assoc,
20+
A9 = Self::Assoc,
21+
A10 = Self::Assoc,
22+
A11 = Self::Assoc,
23+
A12 = Self::Assoc,
24+
A13 = Self::Assoc,
25+
A14 = Self::Assoc,
26+
A15 = Self::Assoc,
27+
>
28+
{
29+
type Assoc;
30+
}
31+
32+
trait Super {
33+
type A0;
34+
type A1;
35+
type A2;
36+
type A3;
37+
type A4;
38+
type A5;
39+
type A6;
40+
type A7;
41+
type A8;
42+
type A9;
43+
type A10;
44+
type A11;
45+
type A12;
46+
type A13;
47+
type A14;
48+
type A15;
49+
}
50+
51+
trait Overlap {}
52+
impl<T: RecursiveSuper> Overlap for T {}
53+
impl<T> Overlap for Box<T> {}
54+
//~^ ERROR conflicting implementations of trait `Overlap` for type `Box<_>`
55+
56+
fn main() {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
error[E0119]: conflicting implementations of trait `Overlap` for type `Box<_>`
2+
--> $DIR/ambiguity-causes-visitor-hang.rs:53:1
3+
|
4+
LL | impl<T: RecursiveSuper> Overlap for T {}
5+
| ------------------------------------- first implementation here
6+
LL | impl<T> Overlap for Box<T> {}
7+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `Box<_>`
8+
|
9+
= note: downstream crates may implement trait `Super` for type `std::boxed::Box<_>`
10+
= note: downstream crates may implement trait `RecursiveSuper` for type `std::boxed::Box<_>`
11+
12+
error: aborting due to 1 previous error
13+
14+
For more information about this error, try `rustc --explain E0119`.

0 commit comments

Comments
 (0)
Failed to load comments.