-
Notifications
You must be signed in to change notification settings - Fork 15.4k
Open
Description
This code hits an UNREACHABLE in the ARM backend when compiled for a target with integer-only MVE using the hard-float ABI:
#include <setjmp.h>
struct S145 {
double M0[4];
};
struct S145 F62() {
jmp_buf jb;
if (!setjmp(jb)) {
longjmp(jb, 1);
}
struct S145 result = {0.0, 0.0, 0.0, 0.0};
return result;
}
static __attribute((noinline)) void F22() {
F62();
}
int main() {
// Escape a pointer to F62
asm volatile("" : : "r" (&F62));
F22();
return 0;
}$ /work/llvm/install/bin/clang --target=arm-none-eabi -march=armv8.1-m.main+mve+nofp -c test.c -O1 -mfloat-abi=hard -isystem /work/et/build/llvm/lib/clang-runtimes/arm-none-eabi/armv8.1m.main_hard_nofp_mve/include
Call result #2 has unhandled type f64
UNREACHABLE executed at /work/llvm/llvm-project/llvm/lib/CodeGen/CallingConvLower.cpp:172!
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: /work/llvm/install/bin/clang --target=arm-none-eabi -march=armv8.1-m.main+mve+nofp -c test.c -O1 -mfloat-abi=hard -isystem /work/et/build/llvm/lib/clang-runtimes/arm-none-eabi/armv8.1m.main_hard_nofp_mve/include
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'test.c'.
4. Running pass 'ARM Instruction Selection' on function '@F22'
#0 0x000055806a6de817 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/install/bin/clang+0x8095817)
#1 0x000055806a6dc3fe llvm::sys::RunSignalHandlers() (/work/llvm/install/bin/clang+0x80933fe)
#2 0x000055806a644f18 CrashRecoverySignalHandler(int) CrashRecoveryContext.cpp:0:0
#3 0x00007f3b01e42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f3b01e969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007f3b01e969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007f3b01e969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007f3b01e42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007f3b01e287f3 abort ./stdlib/abort.c:81:7
#9 0x000055806a64d141 (/work/llvm/install/bin/clang+0x8004141)
#10 0x00005580699c8924 (/work/llvm/install/bin/clang+0x737f924)
#11 0x00005580699c8f1d llvm::CCState::resultsCompatible(unsigned int, unsigned int, llvm::MachineFunction&, llvm::LLVMContext&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&), bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)) (/work/llvm/install/bin/clang+0x737ff1d)
#12 0x00005580687ad761 llvm::ARMTargetLowering::IsEligibleForTailCallOptimization(llvm::TargetLowering::CallLoweringInfo&, llvm::CCState&, llvm::SmallVectorImpl<llvm::CCValAssign>&, bool) const ARMISelLowering.cpp:0:0
#13 0x00005580687a9d4e llvm::ARMTargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const ARMISelLowering.cpp:0:0
#14 0x000055806b934364 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/work/llvm/install/bin/clang+0x92eb364)
#15 0x000055806b955582 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/work/llvm/install/bin/clang+0x930c582)
#16 0x000055806b93caa5 llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*, llvm::TargetLowering::PtrAuthInfo const*) (/work/llvm/install/bin/clang+0x92f3aa5)
#17 0x000055806b9259de llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (/work/llvm/install/bin/clang+0x92dc9de)
#18 0x000055806b91860c llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/work/llvm/install/bin/clang+0x92cf60c)
#19 0x000055806b9d6e96 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&) (/work/llvm/install/bin/clang+0x938de96)
#20 0x000055806b9d660c llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/llvm/install/bin/clang+0x938d60c)
#21 0x000055806b9d3902 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/install/bin/clang+0x938a902)
#22 0x00005580688b88f1 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) ARMISelDAGToDAG.cpp:0:0
#23 0x000055806b9d1216 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/install/bin/clang+0x9388216)
#24 0x0000558069b6faf4 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/llvm/install/bin/clang+0x7526af4)
#25 0x000055806a0c0729 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/install/bin/clang+0x7a77729)
#26 0x000055806a0c8521 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/install/bin/clang+0x7a7f521)
#27 0x000055806a0c11af llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/install/bin/clang+0x7a781af)
#28 0x000055806aefbd51 clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, 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*) (/work/llvm/install/bin/clang+0x88b2d51)
#29 0x000055806af20a4d clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/llvm/install/bin/clang+0x88d7a4d)
#30 0x000055806cd62037 clang::ParseAST(clang::Sema&, bool, bool) (/work/llvm/install/bin/clang+0xa719037)
#31 0x000055806b3b8e40 clang::FrontendAction::Execute() (/work/llvm/install/bin/clang+0x8d6fe40)
#32 0x000055806b31f43f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/llvm/install/bin/clang+0x8cd643f)
#33 0x000055806b4a9ad7 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/llvm/install/bin/clang+0x8e60ad7)
#34 0x0000558067ecadb6 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/llvm/install/bin/clang+0x5881db6)
#35 0x0000558067ec73f1 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#36 0x000055806b155779 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::$_1>(long) Job.cpp:0:0
#37 0x000055806a644c5b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/llvm/install/bin/clang+0x7ffbc5b)
#38 0x000055806b154ce0 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/work/llvm/install/bin/clang+0x8b0bce0)
#39 0x000055806b10ec98 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/llvm/install/bin/clang+0x8ac5c98)
#40 0x000055806b10ef57 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/llvm/install/bin/clang+0x8ac5f57)
#41 0x000055806b1305a7 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/llvm/install/bin/clang+0x8ae75a7)
#42 0x0000558067ec6a8e clang_main(int, char**, llvm::ToolContext const&) (/work/llvm/install/bin/clang+0x587da8e)
#43 0x0000558067ed7f07 main (/work/llvm/install/bin/clang+0x588ef07)
#44 0x00007f3b01e29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#45 0x00007f3b01e29e40 call_init ./csu/../csu/libc-start.c:128:20
#46 0x00007f3b01e29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#47 0x0000558067ec4be5 _start (/work/llvm/install/bin/clang+0x587bbe5)
clang: error: clang frontend command failed with exit code 134 (use -v to see invocation)
clang version 20.0.0git (git@github.com:llvm/llvm-project.git 0bd513082540b2b00bfad1540812e3ea282e70ed)
Target: arm-unknown-none-eabi
Thread model: posix
InstalledDir: /work/llvm/install/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/test-d735c0.c
clang: note: diagnostic msg: /tmp/test-d735c0.sh
clang: note: diagnostic msg:
********************
IR reproducer:
target datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
target triple = "thumbv8.1m.main-unknown-none-eabihf"
%struct.S145 = type { [4 x double] }
define %struct.S145 @F62() "target-features"="+armv8.1-m.main,+mve" {
entry:
%jb = alloca [20 x i64], align 8
%call = call i32 @setjmp(ptr noundef nonnull %jb)
%tobool.not = icmp eq i32 %call, 0
br i1 %tobool.not, label %if.then, label %if.end
if.then: ; preds = %entry
call void @longjmp(ptr noundef nonnull %jb, i32 noundef 1)
unreachable
if.end: ; preds = %entry
ret %struct.S145 zeroinitializer
}
declare dso_local i32 @setjmp(ptr noundef) returns_twice
declare dso_local void @longjmp(ptr noundef, i32 noundef) noreturn
define fastcc void @F22() unnamed_addr "target-features"="+armv8.1-m.main,+mve" {
entry:
%call = tail call %struct.S145 @F62()
ret void
}
$ /work/llvm/install/bin/llc < test.ll
.text
.syntax unified
.eabi_attribute 67, "2.09" @ Tag_conformance
.eabi_attribute 6, 21 @ Tag_CPU_arch
.eabi_attribute 7, 77 @ Tag_CPU_arch_profile
.eabi_attribute 8, 0 @ Tag_ARM_ISA_use
.eabi_attribute 9, 3 @ Tag_THUMB_ISA_use
.eabi_attribute 34, 1 @ Tag_CPU_unaligned_access
.eabi_attribute 17, 1 @ Tag_ABI_PCS_GOT_use
.eabi_attribute 20, 1 @ Tag_ABI_FP_denormal
.eabi_attribute 21, 1 @ Tag_ABI_FP_exceptions
.eabi_attribute 23, 3 @ Tag_ABI_FP_number_model
.eabi_attribute 24, 1 @ Tag_ABI_align_needed
.eabi_attribute 25, 1 @ Tag_ABI_align_preserved
.eabi_attribute 28, 1 @ Tag_ABI_VFP_args
.eabi_attribute 38, 1 @ Tag_ABI_FP_16bit_format
.eabi_attribute 14, 0 @ Tag_ABI_PCS_R9_use
.file "<stdin>"
Call result #2 has unhandled type f64
UNREACHABLE executed at /work/llvm/llvm-project/llvm/lib/CodeGen/CallingConvLower.cpp:172!
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0. Program arguments: /work/llvm/install/bin/llc
1. Running pass 'Function Pass Manager' on module '<stdin>'.
2. Running pass 'ARM Instruction Selection' on function '@F22'
#0 0x000055c1963f7317 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/install/bin/llc+0x6d34317)
#1 0x000055c1963f4efe llvm::sys::RunSignalHandlers() (/work/llvm/install/bin/llc+0x6d31efe)
#2 0x000055c1963f79ea SignalHandler(int) Signals.cpp:0:0
#3 0x00007f0b6fa42520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#4 0x00007f0b6fa969fc __pthread_kill_implementation ./nptl/pthread_kill.c:44:76
#5 0x00007f0b6fa969fc __pthread_kill_internal ./nptl/pthread_kill.c:78:10
#6 0x00007f0b6fa969fc pthread_kill ./nptl/pthread_kill.c:89:10
#7 0x00007f0b6fa42476 gsignal ./signal/../sysdeps/posix/raise.c:27:6
#8 0x00007f0b6fa287f3 abort ./stdlib/abort.c:81:7
#9 0x000055c196360171 (/work/llvm/install/bin/llc+0x6c9d171)
#10 0x000055c1952c74e4 (/work/llvm/install/bin/llc+0x5c044e4)
#11 0x000055c1952c7add llvm::CCState::resultsCompatible(unsigned int, unsigned int, llvm::MachineFunction&, llvm::LLVMContext&, llvm::SmallVectorImpl<llvm::ISD::InputArg> const&, bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&), bool (*)(unsigned int, llvm::MVT, llvm::MVT, llvm::CCValAssign::LocInfo, llvm::ISD::ArgFlagsTy, llvm::CCState&)) (/work/llvm/install/bin/llc+0x5c04add)
#12 0x000055c19407ce11 llvm::ARMTargetLowering::IsEligibleForTailCallOptimization(llvm::TargetLowering::CallLoweringInfo&, llvm::CCState&, llvm::SmallVectorImpl<llvm::CCValAssign>&, bool) const ARMISelLowering.cpp:0:0
#13 0x000055c1940793fe llvm::ARMTargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const ARMISelLowering.cpp:0:0
#14 0x000055c196142004 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/work/llvm/install/bin/llc+0x6a7f004)
#15 0x000055c196163522 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/work/llvm/install/bin/llc+0x6aa0522)
#16 0x000055c19614a745 llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*, llvm::TargetLowering::PtrAuthInfo const*) (/work/llvm/install/bin/llc+0x6a87745)
#17 0x000055c19613312e llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (/work/llvm/install/bin/llc+0x6a7012e)
#18 0x000055c196125d5c llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/work/llvm/install/bin/llc+0x6a62d5c)
#19 0x000055c1961f0236 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&) (/work/llvm/install/bin/llc+0x6b2d236)
#20 0x000055c1961ef9ac llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/llvm/install/bin/llc+0x6b2c9ac)
#21 0x000055c1961ecca2 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/install/bin/llc+0x6b29ca2)
#22 0x000055c194187e41 (anonymous namespace)::ARMDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) ARMISelDAGToDAG.cpp:0:0
#23 0x000055c1961ea5b6 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/install/bin/llc+0x6b275b6)
#24 0x000055c1954cec64 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/llvm/install/bin/llc+0x5e0bc64)
#25 0x000055c1959e9dc9 llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/install/bin/llc+0x6326dc9)
#26 0x000055c1959f1bc1 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/install/bin/llc+0x632ebc1)
#27 0x000055c1959ea84f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/install/bin/llc+0x632784f)
#28 0x000055c19379fc23 main (/work/llvm/install/bin/llc+0x40dcc23)
#29 0x00007f0b6fa29d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#30 0x00007f0b6fa29e40 call_init ./csu/../csu/libc-start.c:128:20
#31 0x00007f0b6fa29e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#32 0x000055c193799a65 _start (/work/llvm/install/bin/llc+0x40d6a65)
fish: Job 1, '/work/llvm/install/bin/llc < te…' terminated by signal SIGABRT (Abort)