clang crashes on valid code at -O3 on x86_64-linux-gnu: Segmentation fault
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
Compiler Explorer: https://godbolt.org/z/boad1Pjof
Note:
- fails: trunk
- works: 22.1.0 and earlier
```
[514] % clangtk -v
clang version 23.0.0git (https://github.com/llvm/llvm-project.git d83abac82bd290e16a38ab79f6207f0bc3a07b3c)
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
[515] %
[515] % clangtk -O3 small.c
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: /local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23 -cc1 -triple x86_64-unknown-linux-gnu -O3 -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -main-file-name small.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/local/suz-local/software/emitesting/bugs/20260605-clangtk-m64-O3-build-011346/delta -fcoverage-compilation-dir=/local/suz-local/software/emitesting/bugs/20260605-clangtk-m64-O3-build-011346/delta -resource-dir /local/home/suz/suz-local/software/local/clang-trunk/lib/clang/23 -I /usr/local/include -I /local/suz-local/software/local/include -internal-isystem /local/home/suz/suz-local/software/local/clang-trunk/lib/clang/23/include -internal-isystem /usr/local/include -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/12/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -ferror-limit 19 -fmessage-length=130 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -vectorize-loops -vectorize-slp -faddrsig -fdwarf2-cfi-asm -o /tmp/small-620526.o -x 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 'Loop Pass Manager' on function '@main'
5. Running pass 'Loop Strength Reduction' on basic block '%while.cond.4.5'
#0 0x0000562f67e25c60 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x4543c60)
#1 0x0000562f67e2282c llvm::sys::RunSignalHandlers() (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x454082c)
#2 0x0000562f67e22992 SignalHandler(int, siginfo_t*, void*) Signals.cpp:0:0
#3 0x0000562f67e22a4c SignalHandlerTerminate(int, siginfo_t*, void*) Signals.cpp:0:0
#4 0x00007f4a1245c520 (/lib/x86_64-linux-gnu/libc.so.6+0x42520)
#5 0x0000562f675b8e95 llvm::ConstantInt::get(llvm::LLVMContext&, llvm::APInt const&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x3cd6e95)
#6 0x0000562f675cbfa4 llvm::ConstantInt::get(llvm::Type*, llvm::APInt const&) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x3ce9fa4)
#7 0x0000562f67585552 llvm::ConstantFoldCastInstruction(unsigned int, llvm::Constant*, llvm::Type*) (.part.0) ConstantFold.cpp:0:0
#8 0x0000562f675c8e2a getFoldedCast(llvm::Instruction::CastOps, llvm::Constant*, llvm::Type*, bool) Constants.cpp:0:0
#9 0x0000562f66d646a4 llvm::ScalarEvolution::getTruncateExpr(llvm::SCEV const*, llvm::Type*, unsigned int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x34826a4)
#10 0x0000562f66d60493 llvm::ScalarEvolution::getAddExpr(llvm::SmallVectorImpl>&, llvm::SCEVNoWrapFlags, unsigned int) (.part.0) ScalarEvolution.cpp:0:0
#11 0x0000562f66d53fa0 llvm::ScalarEvolution::getZeroExtendExprImpl(llvm::SCEV const*, llvm::Type*, unsigned int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x3471fa0)
#12 0x0000562f66d54fda llvm::ScalarEvolution::getZeroExtendExpr(llvm::SCEV const*, llvm::Type*, unsigned int) (/local/home/suz/suz-local/software/local/clang-trunk/bin/clang-23+0x3472fda)
...
clangtk: error: unable to execute command: Segmentation fault
clangtk: error: clang frontend command failed with exit code -2 (use -v to see invocation)
clang version 23.0.0git (https://github.com/llvm/llvm-project.git d83abac82bd290e16a38ab79f6207f0bc3a07b3c)
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 FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clangtk: note: diagnostic msg: /tmp/small-f81316.c
clangtk: note: diagnostic msg: /tmp/small-f81316.sh
clangtk: note: diagnostic msg:
********************
Aborted
```
```c
int a[64], b, c, e, f, g, h;
volatile int d;
int main() {
int j;
for (g = 0; g < 64; g++)
if (h)
h = a[g];
if (b) {
for (; e; e++) {
int k = -2;
for (b = 6; b; b--)
for (f = 0; f < 6; f++)
while (d)
k--;
c = k;
}
if (j)
while (1)
;
}
return 0;
}
```
Contributor guide
Assessment
This issue has not been assessed yet.