Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[ARM] Crash "Call result #2 has unhandled type f64" with integer-only MVE and setjmp #109922

Open
ostannard opened this issue Sep 25, 2024 · 1 comment

Comments

@ostannard
Copy link
Collaborator

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)
@llvmbot
Copy link
Member

llvmbot commented Sep 25, 2024

@llvm/issue-subscribers-backend-arm

Author: Oliver Stannard (ostannard)

This code hits an UNREACHABLE in the ARM backend when compiled for a target with integer-only MVE using the hard-float ABI: ```c #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.  &lt;eof&gt; 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 0bd5130)
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 '&lt;stdin&gt;'.
    
  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)

</details>

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

No branches or pull requests

2 participants