Skip to content

Test polymorphic_recursion.rs takes a long time to compile with a debug-assertions=true compiler #121121

Open
@Zalathar

Description

@Zalathar

#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

No one assigned

    Labels

    A-contributor-roadblockArea: Makes things more difficult for new or seasoned contributors to RustA-mir-optArea: MIR optimizationsA-testsuiteArea: The testsuite used to check the correctness of rustcC-optimizationCategory: An issue highlighting optimization opportunities or PRs implementing suchT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.T-typesRelevant to the types team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions