Skip to content

ICE: expected memory, got Static(DefId(0:6 ... ice-zst-static-access.rs with --emir mir #72105

Closed

Description

@matthiaskrgr

Command: rustc src/test/ui/consts/ice-zst-static-access.rs --emit mir

Code

This code is from src/test/ui/consts/ice-zst-static-access.rs

// check-pass

// This is a regression test for ICEs from
// https://github.com/rust-lang/rust/issues/71612
// and
// https://github.com/rust-lang/rust/issues/71709

#[derive(Copy, Clone)]
pub struct Glfw;

static mut GLFW: Option<Glfw> = None;
pub fn new() -> Glfw {
    unsafe {
        if let Some(glfw) = GLFW {
            return glfw;
        } else {
            todo!()
        }
    };
}

extern "C" {
    static _dispatch_queue_attr_concurrent: [u8; 0];
}

static DISPATCH_QUEUE_CONCURRENT: &'static [u8; 0] =
    unsafe { &_dispatch_queue_attr_concurrent };

fn main() {
    *DISPATCH_QUEUE_CONCURRENT;
    new();
}

Meta

rustc --version --verbose:
The compiler is at revision aeb4738

rustc 1.45.0-dev
binary: rustc
commit-hash: unknown
commit-date: unknown
host: x86_64-unknown-linux-gnu
release: 1.45.0-dev
LLVM version: 9.0

Error output

warning: unused unary operation that must be used
  --> ./ui/consts/ice-zst-static-access.rs:30:5
   |
30 |     *DISPATCH_QUEUE_CONCURRENT;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(unused_must_use)]` on by default

error: internal compiler error: src/librustc_middle/mir/interpret/mod.rs:389: expected memory, got Static(DefId(0:6 ~ ice_zst_static_access[317d]::[0]::_dispatch_queue_attr_concurrent[0]))

thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:907:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.45.0-dev running on x86_64-unknown-linux-gnu

error: aborting due to previous error; 1 warning emitted
Backtrace

warning: unused unary operation that must be used
  --> ./ui/consts/ice-zst-static-access.rs:30:5
   |
30 |     *DISPATCH_QUEUE_CONCURRENT;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
   |
   = note: `#[warn(unused_must_use)]` on by default

error: internal compiler error: src/librustc_middle/mir/interpret/mod.rs:389: expected memory, got Static(DefId(0:6 ~ ice_zst_static_access[317d]::[0]::_dispatch_queue_attr_concurrent[0]))

thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:907:9
stack backtrace:
   0:     0x7fee57224089 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hd08e85f94cff0dfc
   1:     0x7fee5726eadc - core::fmt::write::h65255e7874586eb2
   2:     0x7fee572115a0 - std::io::Write::write_fmt::h3426e27a15389754
   3:     0x7fee571feb25 - std::panicking::default_hook::{{closure}}::hf30497d1f1ca597f
   4:     0x7fee571fe80f - std::panicking::default_hook::h9e9a0711680f7c71
   5:     0x7fee589fcd83 - rustc_driver::report_ice::h5ae862a314f73c0a
   6:     0x7fee571ff21d - std::panicking::rust_panic_with_hook::hf9e06a37c137122b
   7:     0x7fee5ca83563 - std::panicking::begin_panic::h33636113330b48aa
   8:     0x7fee5cabda80 - rustc_errors::HandlerInner::bug::h52d7e1cb0240ea9a
   9:     0x7fee5cabc310 - rustc_errors::Handler::bug::hb9179f645d9eebfc
  10:     0x7fee5c5c99bd - rustc_middle::util::bug::opt_span_bug_fmt::{{closure}}::ha2320eff725974f0
  11:     0x7fee5c5ba015 - rustc_middle::ty::context::tls::with_opt::{{closure}}::ha5fdac267ed6d665
  12:     0x7fee5c5b9f7e - rustc_middle::ty::context::tls::with_opt::h5a46bd0f8944e3da
  13:     0x7fee5c5c98c5 - rustc_middle::util::bug::opt_span_bug_fmt::hca9e39ad66e1e817
  14:     0x7fee5c5c9830 - rustc_middle::util::bug::bug_fmt::h12c26b5ba6d149ef
  15:     0x7fee5c2fb158 - rustc_middle::ty::print::pretty::PrettyPrinter::pretty_print_const::h817e42958e0f08aa
  16:     0x7fee5c3eff8c - rustc_middle::mir::pretty_print_const::h3e9268740a5abca3
  17:     0x7fee5726eadc - core::fmt::write::h65255e7874586eb2
  18:     0x7fee5726ff72 - <core::fmt::Formatter as core::fmt::Write>::write_fmt::h4391506298bd83e2
  19:     0x7fee5c717774 - <&T as core::fmt::Debug>::fmt::h57a5131d265df8f0
  20:     0x7fee5726eadc - core::fmt::write::h65255e7874586eb2
  21:     0x7fee5726ff72 - <core::fmt::Formatter as core::fmt::Write>::write_fmt::h4391506298bd83e2
  22:     0x7fee5c3ed5c8 - <rustc_middle::mir::Operand as core::fmt::Debug>::fmt::hb676f8b47d6c04be
  23:     0x7fee5726eadc - core::fmt::write::h65255e7874586eb2
  24:     0x7fee5726ff72 - <core::fmt::Formatter as core::fmt::Write>::write_fmt::h4391506298bd83e2
  25:     0x7fee5c3edc2b - <rustc_middle::mir::Rvalue as core::fmt::Debug>::fmt::h08da1cab9d3f68fd
  26:     0x7fee5726eadc - core::fmt::write::h65255e7874586eb2
  27:     0x7fee5726ff72 - <core::fmt::Formatter as core::fmt::Write>::write_fmt::h4391506298bd83e2
  28:     0x7fee5c3ecf37 - <rustc_middle::mir::Statement as core::fmt::Debug>::fmt::h36848a833a8ff140
  29:     0x7fee5726ea4c - core::fmt::write::h65255e7874586eb2
  30:     0x7fee5724d903 - alloc::fmt::format::h133900b0fc9df957
  31:     0x7fee5b2d700a - rustc_mir::util::pretty::write_mir_pretty::hb3aac4600eda79f5
  32:     0x7fee5b5317d1 - rustc_mir::transform::dump_mir::emit_mir::h1bd5e01ce1a125e0
  33:     0x7fee58dadff3 - rustc_interface::passes::start_codegen::h57d97e26628aab71
  34:     0x7fee58c976f0 - rustc_middle::ty::context::tls::enter_global::h5b0209aac3b02988
  35:     0x7fee58cb1ac6 - rustc_interface::queries::Queries::ongoing_codegen::h6cad2d99c2dcd590
  36:     0x7fee589ca1b1 - rustc_interface::interface::run_compiler_in_existing_thread_pool::h9998dbf493c360fb
  37:     0x7fee58a0a08e - scoped_tls::ScopedKey<T>::set::h429ea38eed219381
  38:     0x7fee58a03494 - rustc_ast::attr::with_globals::h520bb7fad596003b
  39:     0x7fee58a1214f - std::sys_common::backtrace::__rust_begin_short_backtrace::h66a2db9ac00d8f49
  40:     0x7fee58b58a5e - core::ops::function::FnOnce::call_once{{vtable.shim}}::hed3e3cb32357dea8
  41:     0x7fee571ffb38 - std::sys::unix::thread::Thread::new::thread_start::h294f0533d573419f
  42:     0x7fee56f2d46f - start_thread
  43:     0x7fee5704a3d3 - clone
  44:                0x0 - <unknown>

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.45.0-dev running on x86_64-unknown-linux-gnu

query stack during panic:
end of query stack
error: aborting due to previous error; 1 warning emitted

Activity

  1. added
    C-bugCategory: This is a bug.
    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.
    on May 11, 2020
  2. added
    A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)
    A-MIRArea: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.html
    on May 11, 2020
  3. RalfJung commented on May 11, 2020

    @RalfJung
    Member

    This happens on stable, too.

    Cc @rust-lang/wg-const-eval

  4. matthiaskrgr commented on May 11, 2020

    @matthiaskrgr
    MemberAuthor

    This happens on stable, too.

    Not very surprising imo since the original corresponding tickets ( #71612 , #71709 ) are only ~2 weeks old.

  5. RalfJung commented on May 11, 2020

    @RalfJung
    Member

    Those tickets report different ICEs, from what I can see. Same source code, but different assertion hit in the compiler.

  6. matthiaskrgr commented on May 11, 2020

    @matthiaskrgr
    MemberAuthor

    Reduced:

    extern "C" {
        static _dispatch_queue_attr_concurrent: [u8; 0];
    }
    
    fn main() {
    let x: &[u8; 0] =
        unsafe { &_dispatch_queue_attr_concurrent };
    }

    when I use an underscore binding _ instead of x, the ICE no longer occurs:

    extern "C" {
        static _dispatch_queue_attr_concurrent: [u8; 0];
    }
    
    fn main() {
    let _: &[u8; 0] =
        unsafe { &_dispatch_queue_attr_concurrent };
    }
  7. matthiaskrgr commented on May 13, 2020

    @matthiaskrgr
    MemberAuthor

    The same ICE also triggers on this file in the miri submodule: ./src/tools/miri/tests/compile-fail/stacked_borrows/unescaped_static.rs (with --emit mir)

    static ARRAY: [u8; 2] = [0, 1];
    
    fn main() {
        let ptr_to_first = &ARRAY[0] as *const u8;
        // Illegally use this to access the 2nd element.
        let _val = unsafe { *ptr_to_first.add(1) }; //~ ERROR borrow stack
    }
  8. oli-obk commented on May 14, 2020

    @oli-obk
    Contributor

    I'm guessing it's

    so we need to match on the result of the global_alloc and print different output depending on it

  9. added
    A-prettyArea: Pretty printing (including `-Z unpretty`)
    and removed
    A-const-evalArea: Constant evaluation, covers all const contexts (static, const fn, ...)
    on May 14, 2020
  10. RalfJung commented on May 21, 2020

    @RalfJung
    Member

    PR to fix this is up at #72424

  11. matthiaskrgr commented on May 24, 2020

    @matthiaskrgr
    MemberAuthor

    @RalfJung I'm getting a similar ice when checking https://github.com/dtolnay/dtoa with --emit mir.
    I'm wondering if that's fixed as well.
    RUST_BACKTRACE=1 RUSTFLAGS="--emit mir" ~/.cargo/bin/cargo +master check

        Checking dtoa v0.4.5 (/tmp/dtoa)
    error: internal compiler error: src/librustc_middle/mir/interpret/mod.rs:389: expected memory, got Static(DefId(0:37 ~ dtoa[2f84]::DEC_DIGITS_LUT[0]))
    
    thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:907:9
    stack backtrace:
       0: backtrace::backtrace::libunwind::trace
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
       1: backtrace::backtrace::trace_unsynchronized
                 at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
       2: std::sys_common::backtrace::_print_fmt
                 at src/libstd/sys_common/backtrace.rs:78
       3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
                 at src/libstd/sys_common/backtrace.rs:59
       4: core::fmt::write
                 at src/libcore/fmt/mod.rs:1069
       5: std::io::Write::write_fmt
                 at src/libstd/io/mod.rs:1537
       6: std::sys_common::backtrace::_print
                 at src/libstd/sys_common/backtrace.rs:62
       7: std::sys_common::backtrace::print
                 at src/libstd/sys_common/backtrace.rs:49
       8: std::panicking::default_hook::{{closure}}
                 at src/libstd/panicking.rs:198
       9: std::panicking::default_hook
                 at src/libstd/panicking.rs:218
      10: rustc_driver::report_ice
      11: std::panicking::rust_panic_with_hook
                 at src/libstd/panicking.rs:490
      12: std::panicking::begin_panic
      13: rustc_errors::HandlerInner::bug
      14: rustc_errors::Handler::bug
      15: rustc_middle::util::bug::opt_span_bug_fmt::{{closure}}
      16: rustc_middle::ty::context::tls::with_opt::{{closure}}
      17: rustc_middle::ty::context::tls::with_opt
      18: rustc_middle::util::bug::opt_span_bug_fmt
      19: rustc_middle::util::bug::bug_fmt
      20: rustc_middle::ty::print::pretty::PrettyPrinter::pretty_print_const
      21: rustc_middle::mir::pretty_print_const
      22: core::fmt::write
                 at src/libcore/fmt/mod.rs:1069
      23: core::fmt::Formatter::write_fmt
                 at src/libcore/fmt/mod.rs:1498
      24: <&T as core::fmt::Debug>::fmt
      25: core::fmt::write
                 at src/libcore/fmt/mod.rs:1069
      26: core::fmt::Formatter::write_fmt
                 at src/libcore/fmt/mod.rs:1498
      27: <rustc_middle::mir::Operand as core::fmt::Debug>::fmt
      28: core::fmt::write
                 at src/libcore/fmt/mod.rs:1069
      29: core::fmt::Formatter::write_fmt
                 at src/libcore/fmt/mod.rs:1498
      30: <rustc_middle::mir::Rvalue as core::fmt::Debug>::fmt
      31: core::fmt::write
                 at src/libcore/fmt/mod.rs:1069
      32: core::fmt::Formatter::write_fmt
                 at src/libcore/fmt/mod.rs:1498
      33: <rustc_middle::mir::Statement as core::fmt::Debug>::fmt
      34: core::fmt::run
                 at src/libcore/fmt/mod.rs:1103
      35: core::fmt::write
                 at src/libcore/fmt/mod.rs:1078
      36: core::fmt::Write::write_fmt
                 at /rustc/8970e8bcf6153d1ead2283f1a0ed7b192230eca6/src/libcore/fmt/mod.rs:193
      37: alloc::fmt::format
                 at src/liballoc/fmt.rs:586
      38: rustc_mir::util::pretty::write_mir_pretty
      39: rustc_mir::transform::dump_mir::emit_mir
      40: rustc_interface::passes::start_codegen
      41: rustc_middle::ty::context::tls::enter_global
      42: rustc_interface::queries::Queries::ongoing_codegen
      43: rustc_interface::interface::run_compiler_in_existing_thread_pool
      44: scoped_tls::ScopedKey<T>::set
      45: rustc_ast::attr::with_globals
    note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
    
    note: the compiler unexpectedly panicked. this is a bug.
    
    note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
    
    note: rustc 1.45.0-nightly (8970e8bcf 2020-05-23) running on x86_64-unknown-linux-gnu
    
    note: compiler flags: -C embed-bitcode=no -C debuginfo=2 -C incremental --crate-type lib
    
    note: some of the compiler flags provided by cargo are hidden
    
    query stack during panic:
    end of query stack
    error: aborting due to previous error
    
    error: could not compile `dtoa`.
    
    To learn more, run the command again with --verbose.
    
  12. RalfJung commented on May 25, 2020

    @RalfJung
    Member

    That's a bit hard to tell based on a backtrace without line numbers.

    But with my patch, there is no more unwrap_memory in that entire file, so I'd say -- probably.

    There's still an unwrap_fn though, so I suspect there are still ICEs when a function pointer points to a non-function...

  13. RalfJung commented on May 25, 2020

    @RalfJung
    Member

    Btw it would be great if someone could review that PR. :) Looks like @oli-obk is pretty busy.

  14. added 2 commits that reference this issue on May 25, 2020
  15. matthiaskrgr commented on May 27, 2020

    @matthiaskrgr
    MemberAuthor

    Can confirm this fixed the dtoa ICE 👍 :)

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.htmlA-prettyArea: Pretty printing (including `-Z unpretty`)C-bugCategory: This is a bug.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

      No branches or pull requests

      Issue actions