https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83126
Aldy Hernandez <aldyh at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2017-12-19 CC| |aldyh at gcc dot gnu.org Ever confirmed|0 |1 --- Comment #1 from Aldy Hernandez <aldyh at gcc dot gnu.org> --- This test has a write to *fd where fd is uninitialized. Also, the set to fd looks weird: fd = *fd; fd is an int *, and you're trying to set the pointer to the value of a short? I've fixed the uninitialized problem, while leaving the short to int * move, and I still get an ICE, so... confirmed: void ew (unsigned short int c9, int stuff) { int e1; for (;;) { unsigned int *by = &e1; int *fd = &stuff; *fd = c9; fd = *fd; if (*fd != 0) for (*by = 0; *by < 2; ++*by) c9 *= e1; } } We are failing the following assert in transform_to_exit_first_loop_alt: struct reduction_info *red = reduction_phi (reduction_list, phi); gcc_assert (virtual_operand_p (res_a) || res_a == control || red != NULL); (gdb) call debug_generic_stmt(res_a) e1_27 (gdb) call debug_generic_stmt(control) ivtmp_8 FWIW, the defining PHI statement for ivtmp_8 looks weird: # ivtmp_8 = PHI <(17)> As do other PHIs: # c9_29 = PHI <(8), (15)> # e1_30 = PHI <(8), (15)>