Skip to content

Compiler crashes when using object instead of reference to object for input to inline assembly #40885

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
SKTech8462 opened this issue Mar 29, 2017 · 2 comments
Labels
A-inline-assembly Area: Inline assembly (`asm!(…)`) C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@SKTech8462
Copy link

Compiler crashes when using object instead of reference to object for input to inline assembly

Ran into this while trying to use Intel's lidt instruction. It takes a single operand (the address to a structure in memory containing the size and location of your new Interrupt Descriptor Table) and loads the new IDT. I had mistakenly given the struct object as an input instead of a reference to the struct object and compiling that inline asm statement caused the compiler to crash.

Here's the code with the asm! line that crashed the compiler:

unsafe fn load(&self) {
    let idtr = IDTR { size: (41*16)-1, offset: ((self as *const IDT) as u64) };
    asm!("lidt ($0)" :: "r"(idtr) : "memory");
  }

Here's the fixed code that works:

unsafe fn load(&self) {
    let idtr = IDTR { size: (41*16)-1, offset: ((self as *const IDT) as u64) };
    asm!("lidt ($0)" :: "r"(&idtr) : "memory");
  }

Here's the error I got:

error: internal compiler error: /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/operand.rs:83: not immediate: OperandRef(Pair((i16:  %8 = load i16, i16* %6, !dbg !45), (i64:  %9 = load i64, i64* %7, !dbg !45)) @ IDTR)

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

Here's the backtrace:

thread 'rustc' panicked at 'Box<Any>', /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_errors/lib.rs:423
stack backtrace:
   1:     0x7f123b601fbc - std::sys::imp::backtrace::tracing::imp::write::h9c41d2f69e5caabf
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/sys/unix/backtrace/tracing/gcc_s.rs:42
   2:     0x7f123b61043e - std::panicking::default_hook::{{closure}}::h1f61f3c769fffe7a
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:351
   3:     0x7f123b60ffe3 - std::panicking::default_hook::hd5bda4e453dfb4be
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:361
   4:     0x7f123b6108db - std::panicking::rust_panic_with_hook::hffbc74969c7b5d87
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:555
   5:     0x7f1233c819fa - std::panicking::begin_panic::h74ad4f050841c998
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:517
   6:     0x7f1233c968bd - rustc_errors::Handler::bug::h7088c6afc4a008fb
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_errors/lib.rs:423
   7:     0x7f1238987091 - rustc::session::opt_span_bug_fmt::{{closure}}::h8e30a0fda5e6d8ea
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/session/mod.rs:788
   8:     0x7f1238986eae - rustc::session::opt_span_bug_fmt::h4fd6d943719c63ae
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:1003
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/session/mod.rs:784
   9:     0x7f1238986b12 - rustc::session::bug_fmt::he01375c3004c5cfe
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/session/mod.rs:768
  10:     0x7f123ad4e429 - rustc_trans::mir::rvalue::<impl rustc_trans::mir::MirContext<'a, 'tcx>>::trans_rvalue::h7dc15384ecc85210
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/operand.rs:83
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/rvalue.rs:162
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcore/ops.rs:2706
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcore/option.rs:383
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcore/iter/mod.rs:999
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcollections/vec.rs:1655
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcollections/vec.rs:1638
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcollections/vec.rs:1525
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libcore/iter/iterator.rs:1218
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/rvalue.rs:161
  11:     0x7f123ad3a16d - rustc_trans::mir::block::<impl rustc_trans::mir::MirContext<'a, 'tcx>>::trans_block::h31596f784d651219
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/statement.rs:35
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/block.rs:109
  12:     0x7f123ad37cf1 - rustc_trans::mir::trans_mir::h7e5fc59940d6977e
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/mir/mod.rs:337
  13:     0x7f123ad58d77 - rustc_trans::trans_item::TransItem::define::h929f421e720c71df
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/base.rs:596
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/trans_item.rs:88
  14:     0x7f123acdbfcc - rustc_trans::base::trans_crate::h496d157cb52a4b02
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/base.rs:1218
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/dep_graph/graph.rs:83
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_trans/base.rs:1216
  15:     0x7f123b9c0ffd - rustc_driver::driver::phase_4_translate_to_llvm::h106eb073675c3bee
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:1046
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/util/common.rs:48
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:1044
  16:     0x7f123b990bad - rustc_driver::driver::compile_input::{{closure}}::hf0a8bd39d338ce94
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:200
  17:     0x7f123b9b4e35 - rustc_driver::driver::phase_3_run_analysis_passes::{{closure}}::haccf5097991f72ff
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:992
  18:     0x7f123b9a44dc - rustc_driver::driver::phase_3_run_analysis_passes::hc8affcb7a7c3c449
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:974
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/thread/local.rs:253
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:971
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:958
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/thread/local.rs:253
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:955
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc/ty/context.rs:733
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:867
  19:     0x7f123b98ebd6 - rustc_driver::driver::compile_input::h44853ffed84a12cb
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/driver.rs:166
  20:     0x7f123b9d5558 - rustc_driver::run_compiler::hdc4bb0fcf7d0917a
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/lib.rs:221
  21:     0x7f123b8e2948 - std::panicking::try::do_call::ha583797d32a865bd
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/lib.rs:1119
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/lib.rs:137
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/librustc_driver/lib.rs:1053
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panic.rs:296
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:460
  22:     0x7f123b61975a - __rust_maybe_catch_panic
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libpanic_unwind/lib.rs:98
  23:     0x7f123b90be1b - <F as alloc::boxed::FnBox<A>>::call_box::h6903719257a678be
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panicking.rs:436
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/panic.rs:361
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/thread/mod.rs:357
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/liballoc/boxed.rs:605
  24:     0x7f123b60f294 - std::sys::imp::thread::Thread::new::thread_start::h76badbf9b0ecaf58
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/liballoc/boxed.rs:615
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/sys_common/thread.rs:21
                        at /buildslave/rust-buildbot/slave/nightly-dist-rustc-linux/build/src/libstd/sys/unix/thread.rs:84
  25:     0x7f123342d0a3 - start_thread
  26:     0x7f123b2c662c - clone
  27:                0x0 - <unknown>

error: Could not compile `interrupt_handler`.
@TimNN TimNN added A-inline-assembly Area: Inline assembly (`asm!(…)`) I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ labels Mar 29, 2017
@parched
Copy link
Contributor

parched commented Mar 29, 2017

Looks like duplicate of #38735

@Mark-Simulacrum Mark-Simulacrum added the C-bug Category: This is a bug. label Jul 22, 2017
@steveklabnik
Copy link
Member

Closing as a duplicate

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-inline-assembly Area: Inline assembly (`asm!(…)`) C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

5 participants