------- Comment #2 from rguenth at gcc dot gnu dot org 2009-04-04 09:05 ------- Reduced testcase:
typedef float real; typedef real rvec[3]; real phi_sr(int nj,rvec x[],real charge[],real rc,real r1,rvec box, real phi[],rvec f_sr[],int bOld) { int i,j,k,m,ni,i1,i2; real pp,r2,R,R_1,R_2,rc2; real qi,qj,vsr,eps,fscal; rvec dx; for(i=0; (i<nj-1); i++) { for(j=i+1; (j<nj); j++) { if (k == i2) { r2=calc_dx2dx(x[i],x[j],box,dx); if (r2 < rc2) { qj = charge[j]; R_1 = (1.0f/sqrt(r2)); R_2 = R_1*R_1; R = (1.0f/sqrt(R_2)); if (bOld) { fscal = old_f(R,rc,r1)*R_2; pp = old_phi(R,rc,r1); } else { fscal = new_f(R,rc)*R_2; pp = new_phi(R,rc); } phi[i] += eps*qj*pp; phi[j] += eps*qi*pp; vsr += eps*qj*qi*pp; for(m=0; (m<3); m++) { f_sr[i][m] += dx[m]*fscal; f_sr[j][m] -= dx[m]*fscal; } ni++; } } } } } -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39636