Skip to content

ICE when using a7 register in asm! on RISC-V #72487

Closed
@nbdd0121

Description

@nbdd0121

Code

// Compile with target riscv64imac-unknown-none-elf 
#![feature(asm)]
#![no_std]
#[inline]
pub fn sbi_putchar(byte: u8) {
    unsafe { asm!("ecall", in("a0") byte, in("a7") 1, out("a0") _, options(nomem, nostack)) };
}

Meta

rustc --version --verbose:

rustc 1.45.0-nightly (215f2d329 2020-05-22)
binary: rustc
commit-hash: 215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d
commit-date: 2020-05-22
host: x86_64-unknown-linux-gnu
release: 1.45.0-nightly
LLVM version: 10.0

Error output

thread 'rustc' panicked at 'already borrowed: BorrowMutError', /rustc/215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d/src/libcore/cell.rs:877:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

error: internal compiler error: unexpected panic

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 (215f2d329 2020-05-22) running on x86_64-unknown-linux-gnu
Backtrace

thread 'rustc' panicked at 'already borrowed: BorrowMutError', /rustc/215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d/src/libcore/cell.rs:877:9
stack backtrace:
   0:     0x7fec76700c85 - backtrace::backtrace::libunwind::trace::h678b9599e62f63eb
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
   1:     0x7fec76700c85 - backtrace::backtrace::trace_unsynchronized::hb47d77776d18cf5b
                               at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
   2:     0x7fec76700c85 - std::sys_common::backtrace::_print_fmt::he1b14c2dc4d370e2
                               at src/libstd/sys_common/backtrace.rs:78
   3:     0x7fec76700c85 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h0e056b70ceff915d
                               at src/libstd/sys_common/backtrace.rs:59
   4:     0x7fec7673e21c - core::fmt::write::hdf236390fbd68d3d
                               at src/libcore/fmt/mod.rs:1069
   5:     0x7fec766f2d63 - std::io::Write::write_fmt::h5b95d57b9d83617e
                               at src/libstd/io/mod.rs:1537
   6:     0x7fec76705c90 - std::sys_common::backtrace::_print::hde4f93cf630dd149
                               at src/libstd/sys_common/backtrace.rs:62
   7:     0x7fec76705c90 - std::sys_common::backtrace::print::hab894e5c65d4445d
                               at src/libstd/sys_common/backtrace.rs:49
   8:     0x7fec76705c90 - std::panicking::default_hook::{{closure}}::h069a26eaaf53ac74
                               at src/libstd/panicking.rs:198
   9:     0x7fec767059dc - std::panicking::default_hook::he2b0e031648f6bed
                               at src/libstd/panicking.rs:218
  10:     0x7fec76e20903 - rustc_driver::report_ice::h864f92c6660c2aa4
  11:     0x7fec7670633c - std::panicking::rust_panic_with_hook::hd8d0481ab65c637b
                               at src/libstd/panicking.rs:490
  12:     0x7fec76705f1b - rust_begin_unwind
                               at src/libstd/panicking.rs:388
  13:     0x7fec7673adc1 - core::panicking::panic_fmt::hd101a87121fa411f
                               at src/libcore/panicking.rs:101
  14:     0x7fec7673aa33 - core::option::expect_none_failed::h4f0e89faa3179bf7
                               at src/libcore/option.rs:1272
  15:     0x7fec79a81756 - scoped_tls::ScopedKey<T>::with::h0c59400fce946cfb
  16:     0x7fec79a86e8f - rustc_span::symbol::Symbol::intern::hf7b193cb16f76a3b
  17:     0x7fec77c27d32 - rustc_span::symbol::Symbol::with::h3ff849883396e5de
  18:     0x7fec77c190ed - rustc_ast_lowering::expr::<impl rustc_ast_lowering::LoweringContext>::lower_expr_asm::{{closure}}::{{closure}}::ha7652ca923ba2406
  19:     0x7fec77c13ae7 - core::ops::function::impls::<impl core::ops::function::FnMut<A> for &mut F>::call_mut::h35d009477216bdbf
  20:     0x7fec77c68ce4 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hfb35bbed4de46821
  21:     0x7fec77bd8c7f - rustc_ast_lowering::expr::<impl rustc_ast_lowering::LoweringContext>::lower_expr_asm::h45695c17fad94a17
  22:     0x7fec77c29a18 - rustc_data_structures::stack::ensure_sufficient_stack::h63d594414d58746a
  23:     0x7fec77bf8833 - rustc_ast_lowering::LoweringContext::lower_block_noalloc::hf80819afafca832e
  24:     0x7fec77c29a47 - rustc_data_structures::stack::ensure_sufficient_stack::h63d594414d58746a
  25:     0x7fec77bf9152 - rustc_ast_lowering::LoweringContext::lower_stmt::h80362b7f4b7b4f60
  26:     0x7fec77bf88a7 - rustc_ast_lowering::LoweringContext::lower_block_noalloc::hf80819afafca832e
  27:     0x7fec77bf8a0f - rustc_ast_lowering::LoweringContext::lower_block_expr::hbacd80e1f392c6a5
  28:     0x7fec77be6138 - rustc_ast_lowering::item::<impl rustc_ast_lowering::LoweringContext>::lower_fn_body_block::h343df06d5b6d2222
  29:     0x7fec77bdfd4e - rustc_ast_lowering::item::<impl rustc_ast_lowering::LoweringContext>::lower_item::h794a0696e56843c0
  30:     0x7fec77bf13d6 - rustc_ast_lowering::LoweringContext::with_hir_id_owner::habedf129ecf94fdb
  31:     0x7fec77c19a90 - <rustc_ast_lowering::item::ItemLowerer as rustc_ast::visit::Visitor>::visit_mod::h16b02ab3483cc197
  32:     0x7fec77c506f3 - rustc_ast::visit::walk_crate::hbbe895ddb8c52f51
  33:     0x7fec77bee327 - rustc_ast_lowering::lower_crate::h163b139c9c35f9ce
  34:     0x7fec770aeacb - rustc_interface::passes::BoxedResolver::access::{{closure}}::h7b4593563584a020
  35:     0x7fec7702c5c0 - rustc_interface::passes::configure_and_expand::{{closure}}::h3d13b6e2f246eae1
  36:     0x7fec770ae864 - rustc_interface::passes::BoxedResolver::access::he5eb97cd61e7545a
  37:     0x7fec76fd093f - rustc_interface::queries::Queries::lower_to_hir::h044c80e6e51847cc
  38:     0x7fec76fd1603 - rustc_interface::queries::Queries::global_ctxt::h39b02c18f41870e6
  39:     0x7fec76def779 - rustc_interface::interface::run_compiler_in_existing_thread_pool::hef112f594372c48d
  40:     0x7fec76e39c7d - scoped_tls::ScopedKey<T>::set::h69e1a141c393ad1c
  41:     0x7fec76e35a92 - rustc_ast::attr::with_globals::ha3ef908e777fd200
  42:     0x7fec76e3b54c - std::sys_common::backtrace::__rust_begin_short_backtrace::h7985516cd0bcf4ac
  43:     0x7fec76df20ee - core::ops::function::FnOnce::call_once{{vtable.shim}}::h4e23f4c492cf485e
  44:     0x7fec76715b9a - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::hb59dd7261bcac217
                               at /rustc/215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d/src/liballoc/boxed.rs:1057
  45:     0x7fec76715b9a - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::hb7a91030439e6548
                               at /rustc/215f2d3294b08dbdcf8f7d40de21ef1e7eae0a2d/src/liballoc/boxed.rs:1057
  46:     0x7fec76715b9a - std::sys::unix::thread::Thread::new::thread_start::h1e42ba00cae086d8
                               at src/libstd/sys/unix/thread.rs:87
  47:     0x7fec764776db - start_thread
                               at /build/glibc-OTsEL5/glibc-2.27/nptl/pthread_create.c:463
  48:     0x7fec75d7188f - __clone
  49:                0x0 - <unknown>

error: internal compiler error: unexpected panic

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 (215f2d329 2020-05-22) running on x86_64-unknown-linux-gnu

query stack during panic:
end of query stack

This issue has been assigned to @nbdd0121 via this comment.

Metadata

Metadata

Assignees

Labels

A-inline-assemblyArea: Inline assembly (`asm!(…)`)C-bugCategory: This is a bug.F-asm`#![feature(asm)]` (not `llvm_asm`)I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️O-riscvTarget: RISC-V architectureT-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