https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84152
David Malcolm <dmalcolm at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Last reconfirmed| |2018-01-31 Component|c++ |tree-optimization Summary|Internal compiler error |[7 Regression] Internal |when compiling a cxx file |compiler error when | |compiling a cxx file Ever confirmed|0 |1 --- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> --- I can only reproduce it with gcc 7, not with gcc 6 or trunk. Here's a more minimal reproducer (ICEs with both C/C++): float fZNCTDC[4]; float fZPCTDC[4]; struct foo { unsigned int fBits; int fZDCTDCData[32][4]; float fZDCTDCCorrected[32]; int fZDCTDCChannels; }; float GetZDCTDCCorrected(const struct foo *a, int i, int j) { if (a->fBits & (1ULL << 14) && (a->fZDCTDCData[i][j] != 0)) return a->fZDCTDCCorrected[i]; return 0.f; } int GetZNCTDCChannel(struct foo *a) { if (a->fBits & (1ULL << 16)) return a->fZDCTDCChannels; return 10; } void UserExec(struct foo *a) { for (int itdc = 0; itdc < 4; itdc++) { fZNCTDC[itdc] = GetZDCTDCCorrected(a, GetZNCTDCChannel(a), itdc); fZPCTDC[itdc] = GetZDCTDCCorrected(a, GetZNCTDCChannel(a), itdc); } }