$ cat t.c a, b, c; fn1() { while (b--) { c = a; switch (a & 3) case 0: do case 3: case 2: case 1: ; while (--c) ; } } $ clang -O2 t.c ... #8 0x00000000019ffbaa (anonymous namespace)::InnerLoopVectorizer::createBlockInMask(llvm::BasicBlock*) (bin/clang) #9 0x0000000001a000d4 (anonymous namespace)::InnerLoopVectorizer::createEdgeMask(llvm::BasicBlock*, llvm::BasicBlock*) (bin/clang) ... repeats 100+ times ... 1. <eof> parser at end of file 2. Per-module optimization passes 3. Running pass 'Function Pass Manager' on module 't.c'. 4. Running pass 'Loop Vectorization' on function '@fn1' clang: error: unable to execute command: Segmentation fault (core dumped) clang: error: clang frontend command failed due to signal (use -v to see invocation) clang version 3.9.0 (trunk 275303) (llvm/trunk 275304) The crash only occurs at -O2, the bug comes from the interaction of multiple passes.
Bisection points at r264697. This code is coming from real code (pygame) even though it looks like fuzzer output ;)
*** Bug 28716 has been marked as a duplicate of this bug. ***
Sounds like this is a 3.8 -> 3.9 regression.
*** Bug 28190 has been marked as a duplicate of this bug. ***
mkuper pointed out there's a fix up for review: http://reviews.llvm.org/D22952
Fixed by r278573.