Skip to content

Segfault when using llvm_asm memory constraint #87612

Description

@tuomas56

I tried this code:

#![feature(llvm_asm)]
#![crate_type="staticlib"]

// using no_mangle to force codegen, otherwise nothing is emitted
#[no_mangle]
pub unsafe fn test() -> u32 {
    let test: u32;
    llvm_asm!("mov $$32, $0" : "=m"(test));
    test
}

I expected to see this happen:

> rustc test.rs
<no output>

Instead, this happened:

> rustc test.rs 
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x4fdb63)[0x7f6a182c2b63]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7f6a17a1f3c0]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19SelectionDAGBuilder14visitInlineAsmERKNS_8CallBaseE+0x1621)[0x7f6a14f71c31]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19SelectionDAGBuilder5visitERKNS_11InstructionE+0x67)[0x7f6a14f4ff07]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel16SelectBasicBlockENS_14ilist_iteratorINS_12ilist_detail12node_optionsINS_11InstructionELb0ELb0EvEELb0ELb1EEES6_Rb+0x12e)[0x7f6a1500f3be]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel20SelectAllBasicBlocksERKNS_8FunctionE+0x1a3b)[0x7f6a1500e49b]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel20runOnMachineFunctionERNS_15MachineFunctionE+0xb1d)[0x7f6a1500ba9d]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(+0x48c1177)[0x7f6a16f13177]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19MachineFunctionPass13runOnFunctionERNS_8FunctionE+0xee)[0x7f6a14b3496e]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE+0x639)[0x7f6a148f7869]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE+0x33)[0x7f6a148fe703]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE+0x470)[0x7f6a148f80d0]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20c41e8)[0x7f6a19e891e8]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2050c3f)[0x7f6a19e15c3f]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2053afc)[0x7f6a19e18afc]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x204f29b)[0x7f6a19e1429b]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2048ada)[0x7f6a19e0dada]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20940bc)[0x7f6a19e590bc]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20b267c)[0x7f6a19e7767c]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/libstd-9c44f1fe63de3edb.so(rust_metadata_std_ed022288c3a1d27e+0xa8a97)[0x7f6a17aeda97]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x9609)[0x7f6a17a13609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f6a17927293]
Segmentation fault

Meta

rustc --version --verbose:

rustc 1.56.0-nightly (492723897 2021-07-29)
binary: rustc
commit-hash: 492723897e9b4db6701b3a75b72618d08a7d5319
commit-date: 2021-07-29
host: x86_64-unknown-linux-gnu
release: 1.56.0-nightly
LLVM version: 12.0.1
Backtrace

> BACKTRACE=1 rustc test.rs
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x4fdb63)[0x7f6d10697b63]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x153c0)[0x7f6d0fdf43c0]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19SelectionDAGBuilder14visitInlineAsmERKNS_8CallBaseE+0x1621)[0x7f6d0d346c31]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19SelectionDAGBuilder5visitERKNS_11InstructionE+0x67)[0x7f6d0d324f07]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel16SelectBasicBlockENS_14ilist_iteratorINS_12ilist_detail12node_optionsINS_11InstructionELb0ELb0EvEELb0ELb1EEES6_Rb+0x12e)[0x7f6d0d3e43be]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel20SelectAllBasicBlocksERKNS_8FunctionE+0x1a3b)[0x7f6d0d3e349b]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm16SelectionDAGISel20runOnMachineFunctionERNS_15MachineFunctionE+0xb1d)[0x7f6d0d3e0a9d]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(+0x48c1177)[0x7f6d0f2e8177]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm19MachineFunctionPass13runOnFunctionERNS_8FunctionE+0xee)[0x7f6d0cf0996e]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm13FPPassManager13runOnFunctionERNS_8FunctionE+0x639)[0x7f6d0cccc869]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm13FPPassManager11runOnModuleERNS_6ModuleE+0x33)[0x7f6d0ccd3703]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so(_ZN4llvm6legacy15PassManagerImpl3runERNS_6ModuleE+0x470)[0x7f6d0cccd0d0]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20c41e8)[0x7f6d1225e1e8]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2050c3f)[0x7f6d121eac3f]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2053afc)[0x7f6d121edafc]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x204f29b)[0x7f6d121e929b]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x2048ada)[0x7f6d121e2ada]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20940bc)[0x7f6d1222e0bc]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so(+0x20b267c)[0x7f6d1224c67c]
/home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/libstd-9c44f1fe63de3edb.so(rust_metadata_std_ed022288c3a1d27e+0xa8a97)[0x7f6d0fec2a97]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x9609)[0x7f6d0fde8609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43)[0x7f6d0fcfc293]
Segmentation fault

GDB Backtrace

Reading symbols from rustc...
(gdb) run test.rs
Starting program: /home/tuomas/.cargo/bin/rustc test.rs
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
process 12241 is executing new program: /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rustc
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7fffee3ff700 (LWP 12245)]
[New Thread 0x7fffe8387700 (LWP 12246)]
[New Thread 0x7fffe7dff700 (LWP 12247)]
[New Thread 0x7fffe73ff700 (LWP 12248)]
[New Thread 0x7fffe6dff700 (LWP 12249)]

Thread 6 "opt test.6a6880" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe6dff700 (LWP 12249)]
0x00007ffff1809c31 in llvm::SelectionDAGBuilder::visitInlineAsm(llvm::CallBase const&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
(gdb) bt
#0  0x00007ffff1809c31 in llvm::SelectionDAGBuilder::visitInlineAsm(llvm::CallBase const&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#1  0x00007ffff17e7f07 in llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#2  0x00007ffff18a73be 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/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#3  0x00007ffff18a649b in llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#4  0x00007ffff18a3a9d in llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#5  0x00007ffff37ab177 in (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) [clone .llvm.6640036156556231831] ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#6  0x00007ffff13cc96e in llvm::MachineFunctionPass::runOnFunction(llvm::Function&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#7  0x00007ffff118f869 in llvm::FPPassManager::runOnFunction(llvm::Function&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#8  0x00007ffff1196703 in llvm::FPPassManager::runOnModule(llvm::Module&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightl--Type <RET> for more, q to quit, c to continue without paging--
y.so
#9  0x00007ffff11900d0 in llvm::legacy::PassManagerImpl::run(llvm::Module&) ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/../lib/libLLVM-12-rust-1.56.0-nightly.so
#10 0x00007ffff67211e8 in LLVMRustWriteOutputFile ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#11 0x00007ffff66adc3f in rustc_codegen_llvm::back::write::write_output_file ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#12 0x00007ffff66b0afc in rustc_codegen_llvm::back::write::codegen ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#13 0x00007ffff66ac29b in rustc_codegen_ssa::back::write::finish_intra_module_work ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#14 0x00007ffff66a5ada in rustc_codegen_ssa::back::write::execute_work_item ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#15 0x00007ffff66f10bc in std::sys_common::backtrace::__rust_begin_short_backtrace ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#16 0x00007ffff670f67c in core::ops::function::FnOnce::call_once{{vtable-shim}} ()
   from /home/tuomas/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/../lib/librustc_driver-41fdbb8b89e55544.so
#17 0x00007ffff4385a97 in <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once ()
    at /rustc/492723897e9b4db6701b3a75b72618d08a7d5319/library/alloc/src/boxed.rs:1572
#18 <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once ()
    at /rustc/492723897e9b4db6701b3a75b72618d08a7d5319/library/alloc/src/boxed.rs:1572
#19 std::sys::unix::thread::Thread::new::thread_start () at library/std/src/sys/unix/thread.rs:91
#20 0x00007ffff42ab609 in start_thread (arg=<optimized out>) at pthread_create.c:477
#21 0x00007ffff41bf293 in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

No activity

Activity on this issue will appear here.

Activity

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

    C-bugCategory: This is a bug.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions