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.
After commit f6bff7827a48 ("riscv: uaccess: use 'asm_goto_output' for get_user()") in -next, I am seeing an assertion failure in many files.
I am not sure I see anything immediately obviously wrong with the inline assembly additions added by that commit but maybe there is. Regardless,
cvisespits outas a file that gives GCC and
clangwithout assertions any errors but does trigger that assertion.llvm-reducespits outas a file that crashes
llcwith assertions but not without.cc @bwendling since you have some experience with
asm gotowith 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.