https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111915
Bug ID: 111915 Summary: GCC: ICEs on a program with __restrict and option `-O2 -fno-tree-vrp -fno-tree-dominator-opts -fno-tree-ccp` Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: 141242068 at smail dot nju.edu.cn Target Milestone: --- When compile this program, GCC crashes: ``` void foo (int * __restrict a, int * __restrict b, int * __restrict w) { for (int i = 0; i < 16; ++i) { *a += w[2*i+0]; *b += w[2*i&1]; } } int main() { int w[32]; int a = 0, b = 0; foo (&a, b, w); return 0; } ``` Compiler Explorer: https://gcc.godbolt.org/z/8oYjE3e9j The crash seems to be triggered solely under specific conditions: when the -fno-tree-vrp, -fno-tree-dominator-opts, and -fno-tree-ccp options are enabled, in conjunction with an optimization level of -O2 or higher. However, I'm uncertain whether this combination of settings violates on any internal conventions or requirements tied to these options. The full stack dump: ``` <source>: In function 'main': <source>:15:12: warning: passing argument 2 of 'foo' makes pointer from integer without a cast [-Wint-conversion] 15 | foo (&a, b, w); | ^ | | | int <source>:2:43: note: expected 'int * restrict' but argument is of type 'int' 2 | foo (int * __restrict a, int * __restrict b, int * __restrict w) | ~~~~~~~~~~~~~~~~~^ <source>: In function 'foo': <source>:2:1: error: definition in block 3 follows the use 2 | foo (int * __restrict a, int * __restrict b, int * __restrict w) | ^~~ for SSA_NAME: _12 in statement: vect_cst__35 = {_12, _12, _12, _12}; during GIMPLE pass: vect <source>:2:1: internal compiler error: verify_ssa failed 0x231f49e internal_error(char const*, ...) ???:0 0x139c15e verify_ssa(bool, bool) ???:0 Please submit a full bug report, with preprocessed source (by using -freport-bug). Please include the complete backtrace with any bug report. See <https://gcc.gnu.org/bugs/> for instructions. ```