Skip to content

Assertion failed: "start of copy chain MUST be COPY" on RISC-V after using asm goto with outputs #2092

Description

@nathanchance

After commit f6bff7827a48 ("riscv: uaccess: use 'asm_goto_output' for get_user()") in -next, I am seeing an assertion failure in many files.

$ make -skj"$(nproc)" ARCH=riscv LLVM=1 clean defconfig all
...
clang: /run/host/home/nathan/Dev/cbl/src/dev/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:12674: Register FollowCopyChain(MachineRegisterInfo &, Register): Assertion `MI->getOpcode() == TargetOpcode::COPY && "start of copy chain MUST be COPY"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: /run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang --target=riscv64-linux-gnu -fintegrated-as -Werror=unknown-warning-option -Werror=ignored-optimization-argument -Werror=option-ignored -Werror=unused-command-line-argument -fmacro-prefix-map=/run/host/home/nathan/Dev/cbl/src/dev/linux-next/= -std=gnu11 -fshort-wchar -funsigned-char -fno-common -fno-PIE -fno-strict-aliasing -mabi=lp64 -march=rv64imac_zacas_zabha -mno-save-restore -mcmodel=medany -fno-asynchronous-unwind-tables -fno-unwind-tables -mstrict-align -fno-delete-null-pointer-checks -O2 -fstack-protector-strong -fno-omit-frame-pointer -fno-optimize-sibling-calls -ftrivial-auto-var-init=zero -fno-stack-clash-protection -fstrict-flex-arrays=3 -fno-strict-overflow -fno-stack-check -fno-builtin-wcslen -Wall -Wextra -Wundef -Werror=implicit-function-declaration -Werror=implicit-int -Werror=return-type -Werror=strict-prototypes -Wno-format-security -Wno-trigraphs -Wno-frame-address -Wno-address-of-packed-member -Wmissing-declarations -Wmissing-prototypes -Wframe-larger-than=2048 -Wno-gnu -Wno-format-overflow-non-kprintf -Wno-format-truncation-non-kprintf -Wno-default-const-init-unsafe -Wno-pointer-sign -Wcast-function-type -Wno-unterminated-string-initialization -Wimplicit-fallthrough -Werror=date-time -Werror=incompatible-pointer-types -Wenum-conversion -Wunused -Wno-unused-but-set-variable -Wno-unused-const-variable -Wno-format-overflow -Wno-override-init -Wno-pointer-to-enum-cast -Wno-tautological-constant-out-of-range-compare -Wno-unaligned-access -Wno-enum-compare-conditional -Wno-missing-field-initializers -Wno-type-limits -Wno-shift-negative-value -Wno-enum-enum-conversion -Wno-sign-compare -Wno-unused-parameter -mstack-protector-guard=tls -mstack-protector-guard-reg=tp -mstack-protector-guard-offset=1152 -nostdinc -I/run/host/home/nathan/Dev/cbl/src/dev/linux-next/arch/riscv/include -I./arch/riscv/include/generated -I/run/host/home/nathan/Dev/cbl/src/dev/linux-next/include -I./include -I/run/host/home/nathan/Dev/cbl/src/dev/linux-next/arch/riscv/include/uapi -I./arch/riscv/include/generated/uapi -I/run/host/home/nathan/Dev/cbl/src/dev/linux-next/include/uapi -I./include/generated/uapi -include /run/host/home/nathan/Dev/cbl/src/dev/linux-next/include/linux/compiler-version.h -include /run/host/home/nathan/Dev/cbl/src/dev/linux-next/include/linux/kconfig.h -include /run/host/home/nathan/Dev/cbl/src/dev/linux-next/include/linux/compiler_types.h -D__KERNEL__ -I/run/host/home/nathan/Dev/cbl/src/dev/linux-next/net/ipv6 -Inet/ipv6 -DKBUILD_MODFILE=\"net/ipv6/ipv6\" -DKBUILD_BASENAME=\"raw\" -DKBUILD_MODNAME=\"ipv6\" -D__KBUILD_MODNAME=kmod_ipv6 -c -Wp,-MMD,net/ipv6/.raw.o.d -fcolor-diagnostics -o net/ipv6/raw.o /run/host/home/nathan/Dev/cbl/src/dev/linux-next/net/ipv6/raw.c
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module '/run/host/home/nathan/Dev/cbl/src/dev/linux-next/net/ipv6/raw.c'.
4.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@rawv6_getsockopt'
 #0 0x00005569d72f1196 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x5cfb196)
 #1 0x00005569d72eeace llvm::sys::RunSignalHandlers() (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x5cf8ace)
 #2 0x00005569d726a3cd CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f78c184def0 (/usr/lib/libc.so.6+0x3def0)
 #4 0x00007f78c18a774c (/usr/lib/libc.so.6+0x9774c)
 #5 0x00007f78c184ddc0 raise (/usr/lib/libc.so.6+0x3ddc0)
 #6 0x00007f78c183557a abort (/usr/lib/libc.so.6+0x2557a)
 #7 0x00007f78c18354e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3)
 #8 0x00005569d8e58c2d llvm::SelectionDAGBuilder::visitCallBrLandingPad(llvm::CallInst const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x7862c2d)
 #9 0x00005569d8e45d33 llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x784fd33)
#10 0x00005569d8e15704 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x781f704)
#11 0x00005569d8ee0465 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x78ea465)
#12 0x00005569d8edf7d6 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x78e97d6)
#13 0x00005569d8edc901 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x78e6901)
#14 0x00005569d8eda179 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x78e4179)
#15 0x00005569d681a303 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x5224303)
#16 0x00005569d6daeba9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x57b8ba9)
#17 0x00005569d6db6fd2 llvm::FPPassManager::runOnModule(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x57c0fd2)
#18 0x00005569d6daf5c7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x57b95c7)
#19 0x00005569d7aa19f5 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x64ab9f5)
#20 0x00005569d7ab7f1a clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x64c1f1a)
#21 0x00005569d91e80a9 clang::ParseAST(clang::Sema&, bool, bool) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x7bf20a9)
#22 0x00005569d80b8de4 clang::FrontendAction::Execute() (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x6ac2de4)
#23 0x00005569d8020a2d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x6a2aa2d)
#24 0x00005569d81975e0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x6ba15e0)
#25 0x00005569d510b934 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x3b15934)
#26 0x00005569d5107829 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x00005569d7e72a39 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#28 0x00005569d726a03e llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x5c7403e)
#29 0x00005569d7e72224 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x687c224)
#30 0x00005569d7e323c8 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x683c3c8)
#31 0x00005569d7e32607 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x683c607)
#32 0x00005569d7e4f719 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x6859719)
#33 0x00005569d5107021 clang_main(int, char**, llvm::ToolContext const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x3b11021)
#34 0x00005569d5117876 main (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x3b21876)
#35 0x00007f78c18376b5 (/usr/lib/libc.so.6+0x276b5)
#36 0x00007f78c1837769 __libc_start_main (/usr/lib/libc.so.6+0x27769)
#37 0x00005569d5105165 _start (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang+0x3b0f165)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
ClangBuiltLinux clang version 21.0.0git (https://github.com/llvm/llvm-project.git abf1bfb687238815fe11a0124d50e61f397452b5)
Target: riscv64-unknown-linux-gnu
Thread model: posix
InstalledDir: /run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin
Build config: +assertions
clang: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/raw-1f1aa9.c
clang: note: diagnostic msg: /tmp/raw-1f1aa9.sh
clang: note: diagnostic msg:

********************
make[6]: *** [/run/host/home/nathan/Dev/cbl/src/dev/linux-next/scripts/Makefile.build:287: net/ipv6/raw.o] Error 1
...

I am not sure I see anything immediately obviously wrong with the inline assembly additions added by that commit but maybe there is. Regardless, cvise spits out

long sock_ioctl_arg___gu_err;
typeof(0) sock_ioctl_arg___gu_val;
void f_setown(int);
long sock_ioctl_arg() {
  if (({
        ({
          asm goto("    .irp    "
                   "num,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,"
                   "    .equ    .L__gpr_num_x\\num, \\num\n"
                   "    .endr\n"
                   : "=&r"(sock_ioctl_arg___gu_val)
                   :
                   :
                   : __gu_failed);
        __gu_failed:
          sock_ioctl_arg___gu_err;
        });
      }))
    f_setown(sock_ioctl_arg___gu_val);
  return 4;
}

as a file that gives GCC and clang without assertions any errors but does trigger that assertion.

$ clang --target=riscv64-linux -O2 -c -o /dev/null socket.i
clang: /run/host/home/nathan/Dev/cbl/src/dev/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:12674: Register FollowCopyChain(MachineRegisterInfo &, Register): Assertion `MI->getOpcode() == TargetOpcode::COPY && "start of copy chain MUST be COPY"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang --target=riscv64-linux -O2 -c -o /dev/null socket.i
1.      <eof> parser at end of file
2.      Code generation
3.      Running pass 'Function Pass Manager' on module 'socket.i'.
4.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@sock_ioctl_arg'
 #0 0x000055efac67f196 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x5cfb196)
 #1 0x000055efac67cace llvm::sys::RunSignalHandlers() (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x5cf8ace)
 #2 0x000055efac5f83cd CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
 #3 0x00007f05ca24def0 (/usr/lib/libc.so.6+0x3def0)
 #4 0x00007f05ca2a774c (/usr/lib/libc.so.6+0x9774c)
 #5 0x00007f05ca24ddc0 raise (/usr/lib/libc.so.6+0x3ddc0)
 #6 0x00007f05ca23557a abort (/usr/lib/libc.so.6+0x2557a)
 #7 0x00007f05ca2354e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3)
 #8 0x000055efae1e6c2d llvm::SelectionDAGBuilder::visitCallBrLandingPad(llvm::CallInst const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x7862c2d)
 #9 0x000055efae1d3d33 llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x784fd33)
#10 0x000055efae1a3704 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x781f704)
#11 0x000055efae26e465 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x78ea465)
#12 0x000055efae26d7d6 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x78e97d6)
#13 0x000055efae26a901 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x78e6901)
#14 0x000055efae268179 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x78e4179)
#15 0x000055efabba8303 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x5224303)
#16 0x000055efac13cba9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x57b8ba9)
#17 0x000055efac144fd2 llvm::FPPassManager::runOnModule(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x57c0fd2)
#18 0x000055efac13d5c7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x57b95c7)
#19 0x000055eface2f9f5 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>, clang::BackendConsumer*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x64ab9f5)
#20 0x000055eface45f1a clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x64c1f1a)
#21 0x000055efae5760a9 clang::ParseAST(clang::Sema&, bool, bool) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x7bf20a9)
#22 0x000055efad446de4 clang::FrontendAction::Execute() (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x6ac2de4)
#23 0x000055efad3aea2d clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x6a2aa2d)
#24 0x000055efad5255e0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x6ba15e0)
#25 0x000055efaa499934 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x3b15934)
#26 0x000055efaa495829 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#27 0x000055efad200a39 void llvm::function_ref<void ()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const::$_0>(long) Job.cpp:0:0
#28 0x000055efac5f803e llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x5c7403e)
#29 0x000055efad200224 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x687c224)
#30 0x000055efad1c03c8 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x683c3c8)
#31 0x000055efad1c0607 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x683c607)
#32 0x000055efad1dd719 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x6859719)
#33 0x000055efaa495021 clang_main(int, char**, llvm::ToolContext const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x3b11021)
#34 0x000055efaa4a5876 main (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x3b21876)
#35 0x00007f05ca2376b5 (/usr/lib/libc.so.6+0x276b5)
#36 0x00007f05ca237769 __libc_start_main (/usr/lib/libc.so.6+0x27769)
#37 0x000055efaa493165 _start (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/clang-21+0x3b0f165)

llvm-reduce spits out

target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n32:64-S128"
target triple = "riscv64-unknown-linux"

define i64 @sock_ioctl_arg(i1 %tobool.not) {
entry:
  %0 = callbr i32 asm "\09.irp\09num,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,\09.equ\09.L__gpr_num_x\\num, \\num\0A\09.endr\0A", "=&r,!i"()
          to label %__gu_failed [label %__gu_failed]

__gu_failed:                                      ; preds = %entry, %entry
  br i1 %tobool.not, label %if.end, label %if.then

if.then:                                          ; preds = %__gu_failed
  tail call void null(i32 signext %0)
  br label %if.end

if.end:                                           ; preds = %if.then, %__gu_failed
  ret i64 0
}

as a file that crashes llc with assertions but not without.

$ llc -o /dev/null reduced.ll
llc: /run/host/home/nathan/Dev/cbl/src/dev/llvm-project/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:12674: Register FollowCopyChain(MachineRegisterInfo &, Register): Assertion `MI->getOpcode() == TargetOpcode::COPY && "start of copy chain MUST be COPY"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: llc -o /dev/null reduced.ll
1.      Running pass 'Function Pass Manager' on module 'reduced.ll'.
2.      Running pass 'RISC-V DAG->DAG Pattern Instruction Selection' on function '@sock_ioctl_arg'
 #0 0x00005608a0f1b766 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5a9a766)
 #1 0x00005608a0f1902e llvm::sys::RunSignalHandlers() (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5a9802e)
 #2 0x00005608a0f1bea4 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
 #3 0x00007fcf2644def0 (/usr/lib/libc.so.6+0x3def0)
 #4 0x00007fcf264a774c (/usr/lib/libc.so.6+0x9774c)
 #5 0x00007fcf2644ddc0 raise (/usr/lib/libc.so.6+0x3ddc0)
 #6 0x00007fcf2643557a abort (/usr/lib/libc.so.6+0x2557a)
 #7 0x00007fcf264354e3 __assert_perror_fail (/usr/lib/libc.so.6+0x254e3)
 #8 0x00005608a0c55a4d llvm::SelectionDAGBuilder::visitCallBrLandingPad(llvm::CallInst const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x57d4a4d)
 #9 0x00005608a0c42943 llvm::SelectionDAGBuilder::visitIntrinsicCall(llvm::CallInst const&, unsigned int) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x57c1943)
#10 0x00005608a0c11b74 llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5790b74)
#11 0x00005608a0ceba65 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, llvm::ilist_iterator_w_bits<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void, true, llvm::BasicBlock>, false, true>, bool&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x586aa65)
#12 0x00005608a0ceadd6 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5869dd6)
#13 0x00005608a0ce7f01 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5866f01)
#14 0x00005608a0ce5779 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x5864779)
#15 0x000056089fedeb53 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x4a5db53)
#16 0x00005608a0468c29 llvm::FPPassManager::runOnFunction(llvm::Function&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x4fe7c29)
#17 0x00005608a0471212 llvm::FPPassManager::runOnModule(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x4ff0212)
#18 0x00005608a04696d7 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x4fe86d7)
#19 0x000056089e6b5230 compileModule(char**, llvm::LLVMContext&) llc.cpp:0:0
#20 0x000056089e6b2890 main (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x3231890)
#21 0x00007fcf264376b5 (/usr/lib/libc.so.6+0x276b5)
#22 0x00007fcf26437769 __libc_start_main (/usr/lib/libc.so.6+0x27769)
#23 0x000056089e6ae8e5 _start (/run/host/home/nathan/Dev/tmp/triage/riscv-asm-goto-outputs-crash/install/llvm-abf1bfb687238815fe11a0124d50e61f397452b5-with-assertions/bin/llc+0x322d8e5)

cc @bwendling since you have some experience with asm goto with outputs. I can also report this upstream if there is anyone else likely to take a look at it. I see another similar report upstream but for x86_64.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Compiler crash (assertions)This bug makes Clang crash when assertions are enabled, emitting a backtraceReported upstreamThis bug was filed on LLVM’s issue tracker, Phabricator, or the kernel mailing list.[ARCH] risc-vThis bug impacts ARCH=riscv[BUG] llvmA bug that should be fixed in upstream LLVM[WORKAROUND] SubmittedThis bug has a submitted workaroundasm gotorelated to the implementation of asm goto

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions