Skip to content

Commit

Permalink
Rollup merge of rust-lang#129757 - saethlin:half-a-recursion, r=compi…
Browse files Browse the repository at this point in the history
…ler-errors

Add a test for trait solver overflow in MIR inliner cycle detection

This test is a combination of the reproducer posted here: rust-lang#128887 (comment) and the existing test for polymorphic recursion: https://github.com/rust-lang/rust/blob/784d444733d65c3d305ce5edcbb41e3d0d0aee2e/tests/mir-opt/inline/polymorphic_recursion.rs

r? ```@compiler-errors```
  • Loading branch information
matthiaskrgr authored Aug 31, 2024
2 parents 8c7a7e3 + c71ede3 commit 6b9ed71
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions tests/mir-opt/inline/type_overflow.rs
Original file line number Diff line number Diff line change
@@ -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);

0 comments on commit 6b9ed71

Please sign in to comment.