https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108608
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- #define N 64 extern double host_du[N][N][N][N]; int foo (void) { double max_rel_err = -1; const double rel_tol = __DBL_EPSILON__; for (int n = 0; n < N; n++) for (int k = 0; k < N; k++) for (int j = 0; j < N; j++) for (int i = 1; i < N - 1; i++) { const double analytic = 2.0 * (i + 1) * __builtin_pow((j + 2) * (k + 3) * (n + 4), 2.0); const double err = host_du[n][k][j][i - 1] - analytic; max_rel_err = __builtin_fmax(__builtin_fabs(err / analytic), max_rel_err); } return max_rel_err < rel_tol; } ICEs too at -O3.