Clang-18 crash: error in backend: Cannot pop empty stack! #75019
Open
Description
Clang-18 crashes on the test case.
Compiler explorer: https://godbolt.org/z/8bTYeKP7G
$cat mutant.c
#define X2(n) X1(n##0) X1(n##1)
#define X4(n) X2(n##0) X2(n##1)
#define X8(n) X4(n##0) X4(n##1)
#ifndef __SPE__
#define FLOAT_REG_CONSTRAINT "f"
#else
#define FLOAT_REG_CONSTRAINT "r"
#endif
#ifndef __NO_FPRS__
__attribute__((noinline)) void
f (void)
{
int mem;
#undef X1
#define X1(n) int gpr##n = 0;
X8(a) X8(b) X8(c)
#undef X1
#define X1(n) double fpr##n = 0.0;
X4(d)
#undef X1
#define X1(n) "+r" (gpr##n),
asm volatile ("" : X8(a) "=m" (mem) : : "memory");
asm volatile ("" : X8(b) "=m" (mem) : : "memory");
asm volatile ("" : X8(c) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "+" FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : X4(d) "=m" (mem) : : "memory");
#undef X1
#define X1(n) "r" (gpr##n),
asm volatile ("" : : X8(a) "m" (mem) : "memory");
asm volatile ("" : : X8(b) "m" (mem) : "memory");
asm volatile ("" : : X8(c) "m" (mem) : "memory");
#undef X1
#define X1(n) FLOAT_REG_CONSTRAINT (fpr##n),
asm volatile ("" : : X4(d) "m" (mem) : "memory");
}
#endif
int
main ()
{
#ifndef __NO_FPRS__
f ();
#endif
return 0;
}
$clang-18 -c mutant.c
fatal error: error in backend: Cannot pop empty stack!
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-18 -c mutant.c
1. <eof> parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'mutant.c'.
4. Running pass 'X86 FP Stackifier' on function '@f'
#0 0x00007faa8c035266 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2b266)
#1 0x00007faa8c033170 llvm::sys::RunSignalHandlers() (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd29170)
#2 0x00007faa8c0348c4 llvm::sys::CleanupOnSignal(unsigned long) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd2a8c4)
#3 0x00007faa8bf829ae (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc789ae)
#4 0x00007faa8bf8296b (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7896b)
#5 0x00007faa8c02fa67 llvm::sys::Process::Exit(int, bool) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xd25a67)
#6 0x000055a3fcc42c23 (/usr/lib/llvm-18/bin/clang+0x13c23)
#7 0x00007faa8bf90c4f llvm::report_fatal_error(llvm::Twine const&, bool) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc86c4f)
#8 0x00007faa8bf90b26 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc86b26)
#9 0x00007faa8ebfa494 (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x38f0494)
#10 0x00007faa8ebf8cba (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x38eecba)
#11 0x00007faa8ebf7bbc (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x38edbbc)
#12 0x00007faa8c3e9552 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0x10df552)
#13 0x00007faa8c17b0df llvm::FPPassManager::runOnFunction(llvm::Function&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe710df)
#14 0x00007faa8c180dc3 llvm::FPPassManager::runOnModule(llvm::Module&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe76dc3)
#15 0x00007faa8c17b7d4 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xe717d4)
#16 0x00007faa9481809f 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>>) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1ade09f)
#17 0x00007faa94bae5fe (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x1e745fe)
#18 0x00007faa937ca866 clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0xa90866)
#19 0x00007faa95622645 clang::FrontendAction::Execute() (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x28e8645)
#20 0x00007faa955a0cc4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x2866cc4)
#21 0x00007faa9569d1c0 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x29631c0)
#22 0x000055a3fcc42837 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-18/bin/clang+0x13837)
#23 0x000055a3fcc3f905 (/usr/lib/llvm-18/bin/clang+0x10905)
#24 0x00007faa95238909 (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24fe909)
#25 0x00007faa8bf8294c llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) (/usr/lib/llvm-18/bin/../lib/libLLVM-18.so.1+0xc7894c)
#26 0x00007faa952382ae clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24fe2ae)
#27 0x00007faa952000f1 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24c60f1)
#28 0x00007faa9520033e clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24c633e)
#29 0x00007faa9521c39c clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) (/usr/lib/llvm-18/bin/../lib/libclang-cpp.so.18+0x24e239c)
#30 0x000055a3fcc3f25c clang_main(int, char**, llvm::ToolContext const&) (/usr/lib/llvm-18/bin/clang+0x1025c)
#31 0x000055a3fcc4cf32 main (/usr/lib/llvm-18/bin/clang+0x1df32)
#32 0x00007faa8a519c87 __libc_start_main /build/glibc-CVJwZb/glibc-2.27/csu/../csu/libc-start.c:344:0
#33 0x000055a3fcc3c1ea _start (/usr/lib/llvm-18/bin/clang+0xd1ea)
clang-18: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Ubuntu clang version 18.0.0 (++20231018091808+48a53509e851-1~exp1~20231018091910.1571)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang-18: note: diagnostic msg:
********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang-18: note: diagnostic msg: /tmp/mutant-70a534.c
clang-18: note: diagnostic msg: /tmp/mutant-70a534.sh
clang-18: note: diagnostic msg:
********************
Activity