gfortran crashes when I use -ffast-math in this subroutine:

C     ==================================================================
      SUBROUTINE GRADEN(RHOE,V,GRAD,VTMP)
C     ==--------------------------------------------------------------==
C     ==   SMOOTHING OF THE DENSITY AND CALCULATION OF |nabla.RHO|    ==
C     ==   ON INPUT : RHOE : DENSITY IN REAL SPACE                    ==
C     ==              V    : UNDEFINED                                ==
C     ==              GRAD : UNDEFINED                                ==
C     ==              VTMP : UNDEFINED                                ==
C     ==   ON OUTPUT: RHOE : DENSITY IN REAL SPACE (SMOOTH)           ==
C     ==              V    : UNDEFINED                                ==
C     ==              GRAD : (GRADIENT OF RHO)^2 IN REAL SPACE        ==
C     ==              VTMP : DENSITY IN G SPACE (SMOOTH)              ==
C     ==--------------------------------------------------------------==
      IMPLICIT NONE
      INCLUDE 'system.h'
      INCLUDE 'cnst.inc'
      INCLUDE 'fft.inc'
      INCLUDE 'cppt.inc'
C     Arguments
      COMPLEX*16 V(MAXFFT),VTMP(NHG)
      REAL*8     RHOE(NNR1),GRAD(NNR1,4)
C     Variables
      REAL*8     GMAX,GCS,SMFAC,EG
      INTEGER    ISUB,IR,IG
C     ==--------------------------------------------------------------==
C     ==  TRANSFORM DENSITY TO G SPACE                                ==
C     ==--------------------------------------------------------------==
      CALL TISET('    GRADEN',ISUB)
C$OMP parallel do private(IR)
      DO IR=1,NNR1
        V(IR) = DCMPLX(RHOE(IR),0.0D0)
      ENDDO
      CALL FWFFT(V)
C     ==--------------------------------------------------------------==
C     ==  SMOOTHING                                                   ==
C     ==--------------------------------------------------------------==
      IF(TSMOOTH) THEN
        GMAX=HG(NHG)



        GCS=SMF*GMAX
C$OMP parallel do private(IG,EG,SMFAC)




        DO IG=1,NHG
          EG=(HG(IG)-GCS)/(SDELTA*GMAX)
          SMFAC=1.0D0/(1.0D0+EXP(EG))
          VTMP(IG)=V(NZH(IG))*SMFAC
        ENDDO
      ELSE
        CALL ZGTHR(NHG,V,VTMP,NZH)
      ENDIF
C     ==--------------------------------------------------------------==
C     ==  FFT OF RHO AND NABLA(X)*RHOE                                ==
C     ==--------------------------------------------------------------==



      CALL ZAZZERO(V,MAXFFT)

C$OMP parallel do private(IG)
      DO IG=1,NHG
        V(NZH(IG))=VTMP(IG)-TPIBA*GK(1,IG)*VTMP(IG)
        V(INDZ(IG))=DCONJG(VTMP(IG)+TPIBA*GK(1,IG)*VTMP(IG))
      ENDDO
      CALL INVFFT(V)
C$OMP parallel do private(IR)




      DO IR=1,NNR1
        RHOE(IR)=DREAL(V(IR))
        GRAD(IR,1)=DIMAG(V(IR))*DIMAG(V(IR))
        GRAD(IR,2)=DIMAG(V(IR))
      ENDDO
C     ==--------------------------------------------------------------==
C     ==  FFT OF NABLA(Y)*RHO AND NABLA(Z)*RHOE                       ==
C     ==--------------------------------------------------------------==



      CALL ZAZZERO(V,MAXFFT)
C$OMP parallel do private(IG)
      DO IG=1,NHG
        V(NZH(IG))=TPIBA*(UIMAG*GK(2,IG)-GK(3,IG))*VTMP(IG)
        V(INDZ(IG))=TPIBA*(-UIMAG*GK(2,IG)+GK(3,IG))*DCONJG(VTMP(IG))
      ENDDO

      CALL INVFFT(V)
C$OMP parallel do private(IR)




      DO IR=1,NNR1
        GRAD(IR,1)=GRAD(IR,1)+DREAL(V(IR)*DCONJG(V(IR)))
        GRAD(IR,3)=DREAL(V(IR))
        GRAD(IR,4)=DIMAG(V(IR))
      ENDDO
      CALL TIHALT('    GRADEN',ISUB)
C     ==--------------------------------------------------------------==
      RETURN
      END
C     ==================================================================


-- 
           Summary: -ffast-math crash
           Product: gcc
           Version: 4.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: nuno dot bandeira at ist dot utl dot pt


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=27069

Reply via email to