Skip to content

ICE with HRTB: Broken MIR in DefId [...] could not prove Binder #59311

@cbourjau

Description

@cbourjau

rustc ICEes when trying to compile the following code. As far as I can tell, the issue is due to the HRTB. All other issues I found mentioning broken MIR in DefId where either using unstable features and/or related to impl Trait which seems to be unrelated to this issue.

Playground link

use std::sync::mpsc::channel;

pub struct S<T> {
    pub thing: T,
}

#[derive(Debug)]
struct E;

impl std::fmt::Display for E {
    fn fmt(&self, _f: &mut std::fmt::Formatter) -> std::fmt::Result {
        unimplemented!()
    }
}

impl std::error::Error for E {}

impl<T> S<T> {
    pub fn do_thing()
    where
        for<'a> &'a T: 'static,
    {
        let (_sender, rx) = channel::<T>();
        let _ = rx.recv().map_err(|_| E);
    }
}

Meta

On the playground, I am able to reproduce the ICE on stable (1.33), beta, and nightly. Locally I have the following setup:

rustc --version --verbose:

rustc 1.33.0 (2aa4c46cf 2019-02-28)
binary: rustc
commit-hash: 2aa4c46cfdd726e97360c2734835aa3515e8c858
commit-date: 2019-02-28
host: x86_64-unknown-linux-gnu
release: 1.33.0
LLVM version: 8.0

Backtrace:

error: internal compiler error: broken MIR in DefId(0/0:9 ~ playground[59ee]::{{impl}}[2]::do_thing[0]) (NoSolution): could not prove Binder(OutlivesPredicate(&'a T, ReStatic))
  --> src/lib.rs:24:35
   |
24 |         let _ = rx.recv().map_err(|_| E);
   |                                   ^^^^^

thread 'rustc' panicked at 'no errors encountered even though `delay_span_bug` issued', src/librustc_errors/lib.rs:322:17
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:39
   1: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:70
   2: std::panicking::default_hook::{{closure}}
             at src/libstd/sys_common/backtrace.rs:58
             at src/libstd/panicking.rs:200
   3: std::panicking::default_hook
             at src/libstd/panicking.rs:215
   4: rustc::util::common::panic_hook
   5: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:482
   6: std::panicking::begin_panic
   7: <rustc_errors::Handler as core::ops::drop::Drop>::drop
   8: core::ptr::real_drop_in_place
   9: core::ptr::real_drop_in_place
  10: core::ptr::real_drop_in_place
  11: <scoped_tls::ScopedKey<T>>::set

Activity

added
I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.
A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.html
C-bugCategory: This is a bug.
on Mar 20, 2019
Centril

Centril commented on Mar 10, 2020

@Centril
Contributor

Triage: Reproduces as of 2020-03-10.

JohnTitor

JohnTitor commented on Jul 28, 2020

@JohnTitor
Member

Triage: This ICE has been fixed in the latest nightly, I assume it's fixed by #73503. Marking as E-needs-test.

added
E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.
on Jul 28, 2020
added 2 commits that reference this issue on Aug 6, 2020
c0b874f
79ec79e
added a commit that references this issue on Aug 6, 2020
4b0882c
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlC-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.glacierICE tracked in rust-lang/glacier.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      Participants

      @Centril@jonas-schievink@cbourjau@JohnTitor@rust-lang-glacier-bot

      Issue actions

        ICE with HRTB: Broken MIR in DefId [...] could not prove Binder · Issue #59311 · rust-lang/rust