diff options
| author | lcnr <rust@lcnr.de> | 2025-01-17 13:23:25 +0100 |
|---|---|---|
| committer | Josh Stone <jistone@redhat.com> | 2025-01-23 11:48:40 -0800 |
| commit | 2694d0fb27afea66208089ff388cc9fd702ac799 (patch) | |
| tree | 6668e81f4d1899222395ff27e104d1368d6af368 | |
| parent | 882a0b520866020bf2830fce0b63291b29bb8d3a (diff) | |
| download | rust-2694d0fb27afea66208089ff388cc9fd702ac799.tar.gz rust-2694d0fb27afea66208089ff388cc9fd702ac799.zip | |
add test
(cherry picked from commit 0910173b3558b0ff7e9e160976618cbb55cb6149)
| -rw-r--r-- | tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.rs | 56 | ||||
| -rw-r--r-- | tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.stderr | 14 |
2 files changed, 70 insertions, 0 deletions
diff --git a/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.rs b/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.rs new file mode 100644 index 00000000000..54854b1b8a5 --- /dev/null +++ b/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.rs @@ -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() {} diff --git a/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.stderr b/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.stderr new file mode 100644 index 00000000000..3731dc5b74e --- /dev/null +++ b/tests/ui/traits/next-solver/coherence/ambiguity-causes-visitor-hang.stderr @@ -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`. |
