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);
  }
}

Reply via email to