Issue 136673
Summary [AArch64] Backend error "Unsupported variadic calling convention" with variadic function with SVE argument
Labels backend:AArch64, crash-on-valid, generated by fuzzer
Assignees
Reporter ostannard
    This code causes a fatal error in the AArch64 backend:

```c
#include <arm_sve.h>

void foo(svint32_t a, ...);
void bar(svint32_t a) { foo(a); }
```

```
$ /work/llvm/build/bin/clang --target=aarch64-none-elf -march=armv8-a+sve -c test.c -O1
fatal error: error in backend: Unsupported variadic calling convention
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/build/bin/clang --target=aarch64-none-elf -march=armv8-a+sve -c test.c -O1
1.      <eof> parser at end of file
2. Code generation
3.      Running pass 'Function Pass Manager' on module 'test.c'.
4.      Running pass 'AArch64 Instruction Selection' on function '@bar'
 #0 0x000055c3a5c7d727 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/work/llvm/build/bin/clang+0x86bb727)
 #1 0x000055c3a5c7b31e llvm::sys::RunSignalHandlers() (/work/llvm/build/bin/clang+0x86b931e)
 #2 0x000055c3a5be3e38 (anonymous namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long) CrashRecoveryContext.cpp:0:0
 #3 0x000055c3a5be3dcf llvm::CrashRecoveryContext::HandleExit(int) (/work/llvm/build/bin/clang+0x8621dcf)
 #4 0x000055c3a5c77b67 llvm::sys::Process::Exit(int, bool) (/work/llvm/build/bin/clang+0x86b5b67)
 #5 0x000055c3a31961f5 (/work/llvm/build/bin/clang+0x5bd41f5)
 #6 0x000055c3a5bebce0 llvm::report_fatal_error(llvm::Twine const&, bool) (/work/llvm/build/bin/clang+0x8629ce0)
 #7 0x000055c3a5bebbd6 (/work/llvm/build/bin/clang+0x8629bd6)
 #8 0x000055c3a322ff9b (/work/llvm/build/bin/clang+0x5c6df9b)
 #9 0x000055c3a3230d65 llvm::AArch64TargetLowering::LowerCall(llvm::TargetLowering::CallLoweringInfo&, llvm::SmallVectorImpl<llvm::SDValue>&) const AArch64ISelLowering.cpp:0:0
#10 0x000055c3a6ff3be6 llvm::TargetLowering::LowerCallTo(llvm::TargetLowering::CallLoweringInfo&) const (/work/llvm/build/bin/clang+0x9a31be6)
#11 0x000055c3a70156c2 llvm::SelectionDAGBuilder::lowerInvokable(llvm::TargetLowering::CallLoweringInfo&, llvm::BasicBlock const*) (/work/llvm/build/bin/clang+0x9a536c2)
#12 0x000055c3a6ffc195 llvm::SelectionDAGBuilder::LowerCallTo(llvm::CallBase const&, llvm::SDValue, bool, bool, llvm::BasicBlock const*, llvm::TargetLowering::PtrAuthInfo const*) (/work/llvm/build/bin/clang+0x9a3a195)
#13 0x000055c3a6fe51ae llvm::SelectionDAGBuilder::visitCall(llvm::CallInst const&) (/work/llvm/build/bin/clang+0x9a231ae)
#14 0x000055c3a6fd7a0c llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/work/llvm/build/bin/clang+0x9a15a0c)
#15 0x000055c3a7099d96 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/build/bin/clang+0x9ad7d96)
#16 0x000055c3a70993cb llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/work/llvm/build/bin/clang+0x9ad73cb)
#17 0x000055c3a7096381 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x9ad4381)
#18 0x000055c3a7093ba9 llvm::SelectionDAGISelLegacy::runOnMachineFunction(llvm::MachineFunction&) (/work/llvm/build/bin/clang+0x9ad1ba9)
#19 0x000055c3a50bb2d8 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x7af92d8)
#20 0x000055c3a5639f0b llvm::FPPassManager::runOnFunction(llvm::Function&) (/work/llvm/build/bin/clang+0x8077f0b)
#21 0x000055c3a5641d41 llvm::FPPassManager::runOnModule(llvm::Module&) (/work/llvm/build/bin/clang+0x807fd41)
#22 0x000055c3a563a91f llvm::legacy::PassManagerImpl::run(llvm::Module&) (/work/llvm/build/bin/clang+0x807891f)
#23 0x000055c3a640f6d9 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*) (/work/llvm/build/bin/clang+0x8e4d6d9)
#24 0x000055c3a6424090 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/work/llvm/build/bin/clang+0x8e62090)
#25 0x000055c3a7e8c697 clang::ParseAST(clang::Sema&, bool, bool) (/work/llvm/build/bin/clang+0xa8ca697)
#26 0x000055c3a6a27436 clang::FrontendAction::Execute() (/work/llvm/build/bin/clang+0x9465436)
#27 0x000055c3a699320f clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/work/llvm/build/bin/clang+0x93d120f)
#28 0x000055c3a6b23537 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/work/llvm/build/bin/clang+0x9561537)
#29 0x000055c3a3195bf3 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/work/llvm/build/bin/clang+0x5bd3bf3)
#30 0x000055c3a3191f61 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&, llvm::ToolContext const&) driver.cpp:0:0
#31 0x000055c3a67dc389 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
#32 0x000055c3a5be3d6b llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/work/llvm/build/bin/clang+0x8621d6b)
#33 0x000055c3a67db8f0 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/build/bin/clang+0x92198f0)
#34 0x000055c3a67987f3 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/work/llvm/build/bin/clang+0x91d67f3)
#35 0x000055c3a6798af7 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/work/llvm/build/bin/clang+0x91d6af7)
#36 0x000055c3a67b80b9 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/work/llvm/build/bin/clang+0x91f60b9)
#37 0x000055c3a31913af clang_main(int, char**, llvm::ToolContext const&) (/work/llvm/build/bin/clang+0x5bcf3af)
#38 0x000055c3a31a2027 main (/work/llvm/build/bin/clang+0x5be0027)
#39 0x00007f2b67429d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#40 0x00007f2b67429e40 call_init ./csu/../csu/libc-start.c:128:20
#41 0x00007f2b67429e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#42 0x000055c3a318f825 _start (/work/llvm/build/bin/clang+0x5bcd825)
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 21.0.0git (g...@github.com:llvm/llvm-project.git 214fb43cb671d89d0e2da6dde348c6ffc360d7f0)
Target: aarch64-unknown-none-elf
Thread model: posix
InstalledDir: /work/llvm/build/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-53bea6.c
clang: note: diagnostic msg: /tmp/test-53bea6.sh
clang: note: diagnostic msg: 

********************
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to