Closed
Description
Compiling the following code with cargo build --release
causes a (signal: 11, SIGSEGV: invalid memory reference)
error.
Code
#![feature(asm)]
#![feature(naked_functions)]
#[inline(never)]
// Removing #[naked] allows this to compile.
#[naked]
fn bar(ptr: *mut u64) -> u64 {
let v;
unsafe {
asm!(
"mov {bar}, {foo}",
foo = in(reg) *ptr,
bar = out(reg) v,
)
}
v
}
fn main() {
bar(&mut 0);
}
It was introduced by:
$ rustc --version
rustc 1.47.0-nightly (5180f3da5 2020-08-23)
Using the previous nightly works:
$ rustc --version
rustc 1.47.0-nightly (663d2f5cd 2020-08-22)
Looking at 663d2f5...5180f3d, the biggest change I see is the upgrade to LLVM 11.
Backtrace
(gdb) bt
#0 0x00007ffff0ccb4ed in llvm::SelectionDAGBuilder::visitLoad(llvm::LoadInst const&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#1 0x00007ffff0cc3637 in llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#2 0x00007ffff0d8404e in llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#3 0x00007ffff0d83667 in llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#4 0x00007ffff0d80342 in llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#5 0x00007ffff2b1de87 in (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&)
()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#6 0x00007ffff08db6ae in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
#7 0x00007ffff06b1002 in llvm::FPPassManager::runOnFunction(llvm::Function&) ()
from /home/build/rust/rustup/toolchains/nightly-2020-08-24-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-11-rust-1.47.0-nightly.so
Metadata
Metadata
Assignees
Labels
Area: `#[naked]`, prologue and epilogue-free, functions, https://git.io/vAzzSCategory: This is a bug.`#![feature(asm)]` (not `llvm_asm`)Issue: The compiler crashes (SIGSEGV, SIGABRT, etc). Use I-ICE instead when the compiler panics.Relevant to the compiler team, which will review and decide on the PR/issue.This issue requires a nightly compiler in some way.