http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52756
--- Comment #2 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-03-29 09:56:12 UTC --- Reduced testcase, but a different ICE than the original one. void Env_FetchObj0AttrOffset (unsigned int NumFields, int *Status) { int Found = 0; if (NumFields) while ((*Status == 0) && NumFields-- > 0 && Found == 0) Found = 1; } Reduced testcase for the original ICE: void Env_FetchObj0AttrOffset (unsigned int NumFields, int AttrNum, int *Status, int *Vfields) { int Found = 0; if (NumFields) while ((*Status == 0) && NumFields-- > 0 && Found == 0) if (*Vfields == AttrNum) Found = 1; }