https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91322
--- Comment #10 from Wilco <wdijkstr at arm dot com> --- (In reply to Christophe Lyon from comment #6) > Created attachment 48184 [details] > GCC passes dumps So according to that, in 105t.vrp1 it removes the branch and unconditionally calls abort: Folding statement: _4 = _3 == 0B; Matching expression match.pd:1737, gimple-match.c:708 Matching expression match.pd:1740, gimple-match.c:772 Matching expression match.pd:1747, gimple-match.c:826 Not folded Folding statement: if (_5 == 0) gimple_simplified to if (1 != 0) Folded into: if (1 != 0) Folding statement: return; Not folded Folding statement: __builtin_abort (); Not folded Removing dead stmt _5 = __builtin_constant_p (_4); It doesn't make sense, these are the VRP ranges: _1: short int * * VARYING _2: short int * * VARYING _3: short int * VARYING _4: bool VARYING _5: int [0, 0] _10: struct a * VARYING So somehow it decides that __builtin_constant_p (VARYING) == [0,0]???