llvm / llvm/llvm-project

clang crashes on valid code at -O1 and above on x86_64-linux-gnu: fatal error: error in backend: Found 1 machine code errors

Open
#212,497 0 comments 0 reactions 0 assignees View on GitHub
confirmed crash-on-valid llvm:analysis llvm:codegen regression:22
Dominant language
LLVM
Stars
40.5k
Forks
18.7k
PR merge metrics
PR metrics pending

Description

Compiler Explorer: https://godbolt.org/z/fMx798vMa

Note:
- fails: trunk
- works: 22.1.0 and earlier

```
[576] % clangtk -v
clang version 24.0.0git (https://github.com/llvm/llvm-project.git b443896c13aded8b40d7bae4a5a9adbc96fd0d31)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/home/suz/suz-local/software/local/clang-trunk/bin
Build config: +assertions
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/12
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
Found CUDA installation: /usr/local/cuda, version 12.1
[577] %
[577] % clangtk -O1 -w -c small.c
...
*** Bad machine code: Virtual register defs don't dominate all uses. ***
- function: main
- v. register: %10
fatal error: error in backend: Found 1 machine code errors.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace and dumped files.
Stack dump:
0. Program arguments: clangtk -I/usr/local/include -I/local/suz-local/software/local/include -O1 -w -c small.c
1. parser at end of file
2. Code generation
3. Running pass 'Function Pass Manager' on module 'small.c'.
4. Running pass 'Live Interval Analysis' on function '@main'
#0 0x0000564c02f234d9 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x45264d9)
#1 0x0000564c02f2019c llvm::sys::RunSignalHandlers() (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x452319c)
#2 0x0000564c02f20a58 llvm::sys::CleanupOnSignal(unsigned long) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x4523a58)
#3 0x0000564c02e5a87a llvm::CrashRecoveryContext::HandleExit(int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x445d87a)
#4 0x0000564c02f1ad12 llvm::sys::Process::Exit(int, bool) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x451dd12)
#5 0x0000564bff811a41 LLVMErrorHandler(void*, char const*, bool) cc1_main.cpp:0:0
#6 0x0000564c02e64e40 llvm::report_fatal_error(llvm::Twine const&, bool) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x4467e40)
#7 0x0000564c022562fb (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x38592fb)
#8 0x0000564c0225643a (anonymous namespace)::MachineVerifier::~MachineVerifier() MachineVerifier.cpp:0:0
#9 0x0000564c0226f5e5 llvm::MachineFunction::verify(llvm::Pass*, char const*, llvm::raw_ostream*, bool) const (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x38725e5)
#10 0x0000564c020a97cd llvm::LiveRangeCalc::findReachingDefs(llvm::LiveRange&, llvm::MachineBasicBlock&, llvm::SlotIndex, llvm::Register, llvm::ArrayRef) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x36ac7cd)
#11 0x0000564c020aa6e6 llvm::LiveRangeCalc::extend(llvm::LiveRange&, llvm::SlotIndex, llvm::Register, llvm::ArrayRef) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x36ad6e6)
#12 0x0000564c020ab2d5 llvm::LiveIntervalCalc::extendToUses(llvm::LiveRange&, llvm::Register, llvm::LaneBitmask, llvm::LiveInterval*) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x36ae2d5)
#13 0x0000564c0208f644 llvm::LiveIntervals::computeVirtRegInterval(llvm::LiveInterval&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3692644)
#14 0x0000564c0209298d llvm::LiveIntervals::computeVirtRegs() (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x369598d)
#15 0x0000564c02092d07 llvm::LiveIntervals::analyze(llvm::MachineFunction&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3695d07)
#16 0x0000564c02092ff5 llvm::LiveIntervalsWrapperPass::runOnMachineFunction(llvm::MachineFunction&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3695ff5)
#17 0x0000564c0215135c llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (.part.0) MachineFunctionPass.cpp:0:0
#18 0x0000564c027c6145 llvm::FPPassManager::runOnFunction(llvm::Function&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3dc9145)
#19 0x0000564c027c6729 llvm::FPPassManager::runOnModule(llvm::Module&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3dc9729)
#20 0x0000564c027c7112 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) LegacyPassManager.cpp:0:0
#21 0x0000564c027c784b llvm::legacy::PassManagerImpl::run(llvm::Module&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x3dca84b)
#22 0x0000564c0335448f (anonymous namespace)::EmitAssemblyHelper::TimeCodegenPasses(llvm::function_ref) BackendUtil.cpp:0:0
#23 0x0000564c03364343 (anonymous namespace)::EmitAssemblyHelper::emitAssembly(clang::BackendAction, std::unique_ptr >, clang::BackendConsumer*) BackendUtil.cpp:0:0
#24 0x0000564c033646f8 clang::emitBackendOutput(clang::CompilerInstance&, clang::CodeGenOptions&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr, std::unique_ptr >, clang::BackendConsumer*) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x49676f8)
#25 0x0000564c03a4f81a clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x505281a)
#26 0x0000564c055af3dc clang::ParseAST(clang::Sema&, bool, bool) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x6bb23dc)
#27 0x0000564c03dab451 clang::FrontendAction::Execute() (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x53ae451)
#28 0x0000564c03d34235 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x5337235)
#29 0x0000564c03e83773 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x5486773)
#30 0x0000564bff814426 cc1_main(llvm::ArrayRef, char const*, void*) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0xe17426)
#31 0x0000564bff809f2a ExecuteCC1Tool(llvm::SmallVectorImpl&, llvm::ToolContext const&, llvm::IntrusiveRefCntPtr) driver.cpp:0:0
#32 0x0000564bff80a0bf int llvm::function_ref&)>::callback_fn&)>(long, llvm::SmallVectorImpl&) driver.cpp:0:0
#33 0x0000564c03acccfd void llvm::function_ref::callback_fn >, std::__cxx11::basic_string, std::allocator >*, bool*) const::'lambda'()>(long) Job.cpp:0:0
#34 0x0000564c02e5a7b0 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x445d7b0)
#35 0x0000564c03acdb53 clang::driver::CC1Command::Execute(llvm::ArrayRef >, std::__cxx11::basic_string, std::allocator >*, bool*) const (.part.0) Job.cpp:0:0
#36 0x0000564c03a83067 clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x5086067)
#37 0x0000564c03a878c0 clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl >&, bool) const (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x508a8c0)
#38 0x0000564c03a95524 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl >&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0x5098524)
#39 0x0000564bff80f893 clang_main(int, char**, llvm::ToolContext const&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0xe12893)
#40 0x0000564bff729501 main (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0xd2c501)
#41 0x00007fe5089c4d90 __libc_start_call_main ./csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#42 0x00007fe5089c4e40 call_init ./csu/../csu/libc-start.c:128:20
#43 0x00007fe5089c4e40 __libc_start_main ./csu/../csu/libc-start.c:379:5
#44 0x0000564bff809555 _start (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-24+0xe0c555)
clangtk: error: clang frontend command failed with exit code 70 (use -v to see invocation)
clang version 24.0.0git (https://github.com/llvm/llvm-project.git b443896c13aded8b40d7bae4a5a9adbc96fd0d31)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /local/home/suz/suz-local/software/local/clang-trunk/bin
Build config: +assertions
clangtk: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING CRASH REPRODUCER FILES TO THE BUG REPORT:
clangtk: note: diagnostic msg: /tmp/small-e86914.c
clangtk: note: diagnostic msg: /tmp/small-e86914.sh
clangtk: note: diagnostic msg:

********************
```

```c
extern void f(int h);
volatile int a;
int b, d, e;
unsigned char c;
int main() {
int h;
while (b) {
e = !d;
h = ((b = e) == c) << 1;
b = h || a;
f(h);
}
return 0;
}
```

Contributor guide

Open the contributing guide

Research direction

Reproduce the failure with the provided small.c at -O1 or above on x86_64 Linux. Start by tracing the backend failure through Live Interval Analysis and the MachineVerifier, then add a regression test for this valid program. Done means clang no longer reports the machine-code verification error while compiling the reproducer.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.