diff --git a/tests/mir-opt/inline/type_overflow.rs b/tests/mir-opt/inline/type_overflow.rs new file mode 100644 index 0000000000000..bfd9e71b9e73f --- /dev/null +++ b/tests/mir-opt/inline/type_overflow.rs @@ -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; +} + +trait FooExt { + fn do_ext() {} +} +impl> FooExt for T {} + +#[allow(unconditional_recursion)] +fn recurse>() { + T::do_ext(); + recurse::(); +} + +macro_rules! emit { + ($($m:ident)*) => {$( + pub fn $m>() { + recurse::(); + } + )*} +} + +// 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);