Skip to content

hang: issue-55608-captures-empty-region.rs with -Zmir-opt-level=2 #75051

Closed
@matthiaskrgr

Description

@matthiaskrgr

Code

./src/test/ui/impl-trait/issues/issue-55608-captures-empty-region.rs

// This used to ICE because it creates an `impl Trait` that captures a
// hidden empty region.

// check-pass

fn server() -> impl FilterBase2 {
    segment2(|| { loop { } }).map2(|| "")
}

trait FilterBase2 {
    fn map2<F>(self, _fn: F) -> Map2<F> where Self: Sized { loop { } }
}

struct Map2<F> { _func: F }

impl<F> FilterBase2 for Map2<F> { }

fn segment2<F>(_fn: F) -> Map2<F> where F: Fn() -> Result<(), ()> {
    loop { }
}

fn main() { server(); }

Meta

repo @ 12799ad

Error output

Rustc simply hangs when running
build/x86_64-unknown-linux-gnu/stage1/bin/rustc ./src/test/ui/impl-trait/issues/issue-55608-captures-empty-region.rs -Zmir-opt-level=2

Edit: perf top while rustc is crunching on the hang:

  45,75%  librustc_driver-3c13214d88d90089.so  [.] rustc_mir::transform::simplify::CfgSimplifier::collapse_goto_chain
  28,35%  librustc_driver-3c13214d88d90089.so  [.] rustc_mir::transform::simplify::CfgSimplifier::simplify
   7,00%  [kernel]                             [k] mwait_idle_with_hints.constprop.0
   2,16%  librustc_driver-3c13214d88d90089.so  [.] rustc_middle::mir::terminator::TerminatorKind::successors_mut
   1,00%  librustc_driver-3c13214d88d90089.so  [.] rustc_middle::mir::terminator::Terminator::successors_mut

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-mir-optArea: MIR optimizationsC-bugCategory: This is a bug.I-hangIssue: The compiler never terminates, due to infinite loops, deadlock, livelock, etc.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.requires-nightlyThis issue requires a nightly compiler in some way.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions