The following code gives an internal compiler error when compiled with -O. It compiles fine if no -O is given.
(conrad)macdiepen.measures> gfortran -o problem.o -c -w -O problem.f fortran/sofa/problem.f: In function 'iau_jd2cal': fortran/sofa/problem.f:41: internal compiler error: tree check: expected call_expr, have nop_expr in expand_call, at calls.c:1910 It compiled fine with gfortran 4.3.0 20061230, while it fails as described above for the latest version (4.3.0 20070811). Cheers, Ger SUBROUTINE iau_JD2CAL ( DJ1, DJ2, IY, IM, ID, FD, J ) IMPLICIT NONE DOUBLE PRECISION DJ1, DJ2 INTEGER IY, IM, ID DOUBLE PRECISION FD INTEGER J * Minimum and maximum allowed JD DOUBLE PRECISION DJMIN, DJMAX PARAMETER ( DJMIN = -68569.5D0, DJMAX = 1D9 ) INTEGER JD, L, N, I DOUBLE PRECISION DJ, D1, D2, F1, F2, F, D * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * Check if date is acceptable. DJ = DJ1 + DJ2 IF ( DJ.LT.DJMIN .OR. DJ.GT.DJMAX ) THEN J = -1 ELSE J = 0 * Copy the date, big then small, and re-align to midnight. IF ( DJ1 .GE. DJ2 ) THEN D1 = DJ1 D2 = DJ2 ELSE D1 = DJ2 D2 = DJ1 END IF D2 = D2 - 0.5D0 * Separate day and fraction. F1 = MOD(D1,1D0) F2 = MOD(D2,1D0) F = MOD(F1+F2,1D0) IF ( F .LT. 0D0 ) F = F+1D0 D = ANINT(D1-F1) + ANINT(D2-F2) + ANINT(F1+F2-F) JD = NINT(D) + 1 * Express day in Gregorian calendar. L = JD + 68569 N = ( 4*L ) / 146097 L = L - ( 146097*N + 3 ) / 4 I = ( 4000 * (L+1) ) / 1461001 L = L - ( 1461*I ) / 4 + 31 J = ( 80*L ) / 2447 ID = L - ( 2447*J ) / 80 L = J / 11 IM = J + 2 - 12*L IY = 100 * ( N-49 ) + I + L FD = F J = 0 END IF END -- Summary: Internal compiler error Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: diepen at astron dot nl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33656