Open
Description
#120912 reported that tests/mir-opt/inline/polymorphic_recursion.rs
became very slow after #120584. A workaround for that slowness was added by a hack in #120942.
However, the test is still very slow when the compiler is built with [rust] debug-assertions=true
.
On my system (Apple M2 Pro):
- Before the original change, it was fast enough that I never noticed it being slow when running
x test mir-opt
. - After the original change but before the hack, it appeared to hang indefinitely (though perhaps it was just running very very slowly).
- After the hack, it still takes about 45 seconds to complete.
// skip-filecheck
// Make sure that the MIR inliner does not loop indefinitely on polymorphic recursion.
// compile-flags: --crate-type lib
// Randomize `def_path_hash` by defining them under a module with different names
macro_rules! emit {
($($m:ident)*) => {$(
pub mod $m {
pub trait Tr { type Next: Tr; }
pub fn hoge<const N: usize, T: Tr>() {
inner::<N, T>();
}
#[inline(always)]
fn inner<const N: usize, T: Tr>()
{
inner::<N, T::Next>();
inner::<N, T::Next>();
}
}
)*};
}
// 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);
Metadata
Metadata
Assignees
Labels
Area: Makes things more difficult for new or seasoned contributors to RustArea: MIR optimizationsArea: The testsuite used to check the correctness of rustcCategory: An issue highlighting optimization opportunities or PRs implementing suchRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the types team, which will review and decide on the PR/issue.