double _Complex test (int d, int t, double *x, double *y, double *z, int n, double _Complex (*fnp) (double)) { int m = n / 2; double min = y[t], max = z[t], med = x[m * d + t]; double _Complex result = 0.0;
if (n == 0) return 0.0; if (min > med) result += test (d, (t + 1) % d, x + (m + 1) * d, y, z, n - m - 1, fnp); else if (max < med) result += test (d, (t + 1) % d, x, y, z, m, fnp); else { result += fnp (y[0] + x[m]); result += test (d, (t + 1) % d, x + (m + 1) * d, y, z, n - m - 1, fnp); } return result; } ICEs at -O2 -ffast-math on x86_64-linux, in 4.4/4.5 with: x.i: In function 'test': x.i:22:1: internal compiler error: in gimple_assign_set_rhs1, at gimple.h:1683 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. and in 4.3 with: x.i: In function 'test': x.i:4: internal compiler error: in set_ssa_val_to, at tree-ssa-sccvn.c:1071 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. Compiles just fine with 4.1 and 4.2. -- Summary: [4.3/4.4/4.5 Regression] ICE in gimple_assign_set_rhs1 from eliminate_tail_call Product: gcc Version: 4.4.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: middle-end AssignedTo: jakub at gcc dot gnu dot org ReportedBy: jakub at gcc dot gnu dot org GCC target triplet: x86_64-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40669