Rollup merge of #129757 - saethlin:half-a-recursion, r=compiler-errors
Add a test for trait solver overflow in MIR inliner cycle detection
This test is a combination of the reproducer posted here: https://github.com/rust-lang/rust/issues/128887#issuecomment-2314198229 and the existing test for polymorphic recursion: 784d444733/tests/mir-opt/inline/polymorphic_recursion.rs
r? ```@compiler-errors```
This commit is contained in:
commit
6b9ed71c21
32
tests/mir-opt/inline/type_overflow.rs
Normal file
32
tests/mir-opt/inline/type_overflow.rs
Normal file
@ -0,0 +1,32 @@
|
||||
// This is a regression test for one of the problems in #128887; it checks that the
|
||||
// strategy in #129714 avoids trait solver overflows in this specific case.
|
||||
|
||||
// skip-filecheck
|
||||
//@ compile-flags: -Zinline-mir
|
||||
|
||||
pub trait Foo {
|
||||
type Associated;
|
||||
type Chain: Foo<Associated = Self::Associated>;
|
||||
}
|
||||
|
||||
trait FooExt {
|
||||
fn do_ext() {}
|
||||
}
|
||||
impl<T: Foo<Associated = f64>> FooExt for T {}
|
||||
|
||||
#[allow(unconditional_recursion)]
|
||||
fn recurse<T: Foo<Associated = f64>>() {
|
||||
T::do_ext();
|
||||
recurse::<T::Chain>();
|
||||
}
|
||||
|
||||
macro_rules! emit {
|
||||
($($m:ident)*) => {$(
|
||||
pub fn $m<T: Foo<Associated = f64>>() {
|
||||
recurse::<T>();
|
||||
}
|
||||
)*}
|
||||
}
|
||||
|
||||
// Increase the chance of triggering the bug
|
||||
emit!(m00 m01 m02 m03 m04 m05 m06 m07 m08 m09 m10 m11 m12 m13 m14 m15 m16 m17 m18 m19);
|
Loading…
Reference in New Issue
Block a user