The following program causes an internal compiler error. Each of the three subroutines causes an ICE. The ICE moves around or goes away when I try to simplify the test much more.
! fails on Windows XP ! gcc version 4.4.0 20080312 (experimental) [trunk revision 133139] Dick Hendrickson MODULE TESTS IMPLICIT CHARACTER(LEN=9) (B) IMPLICIT CHARACTER(LEN=1) (C) IMPLICIT CHARACTER(LEN=9) (E) IMPLICIT CHARACTER(LEN=1) (F) IMPLICIT REAL(KIND=4) (R) IMPLICIT REAL(KIND=8) (D) IMPLICIT INTEGER (I) IMPLICIT INTEGER (H) IMPLICIT LOGICAL (L) IMPLICIT LOGICAL (G) IMPLICIT COMPLEX(KIND=4) (Z) IMPLICIT COMPLEX(KIND=8) (Y) IMPLICIT CHARACTER (A,J,K,M,N,O,P,S,T,U,V,W) INTEGER,PARAMETER,PUBLIC :: NF_KV = KIND(1) INTEGER,PARAMETER,PUBLIC :: I1_KV = KIND(1) INTEGER,PARAMETER,PUBLIC :: I2_KV = I1_KV INTEGER,PARAMETER,PUBLIC :: R1_KV = KIND(1.0) INTEGER,PARAMETER,PUBLIC :: R2_KV = KIND(1.0D0) INTEGER,PARAMETER,PUBLIC :: L1_KV = KIND(.TRUE.) INTEGER,PARAMETER,PUBLIC :: L2_KV = L1_KV INTEGER,PARAMETER,PUBLIC :: C1_KV = KIND('A') INTEGER,PARAMETER,PUBLIC :: C2_KV = C1_KV INTEGER, PARAMETER, PUBLIC :: NPBIG=1000 INTEGER, PARAMETER, PUBLIC :: NPSIZE = 5 INTEGER, PARAMETER, PUBLIC :: NPBIGM = NPBIG-1 INTEGER, PUBLIC, PARAMETER :: $ NP0 = 0, $ NP1 = 1, $ NP2 = 2, $ NP3 = 3, $ NP4 = 4, $ NP5 = 5, $ MP1 = -1, $ MP2 = -2, $ MP3 = -3, $ MP4 = -4, $ MP5 = -5 INTEGER, SAVE :: NF0,NF1,NF2,NF3,NF4,NF5, $ NF6,NF7,NF8,NF9,NF10, $ NFBIGM,NFBIG, $ MF1,MF2,MF3,MF4,MF5, $ MF6,MF7,MF8,MF9,MF10, $ MFBIGM,MFBIG CHARACTER, PRIVATE :: I,J,K,L,M,N INTEGER, PRIVATE :: J1,J2,J3,J4,J5,J6,J7,JJJ INTEGER, PRIVATE :: ISTAT INTEGER(NF_KV), PRIVATE, PARAMETER :: $ NP6=6, NP7=7, NP8=8, NP9=9, NP10=10, $ MP6=-6, MP7=-7, MP8=-8, MP9=-9, MP10=-10 CONTAINS SUBROUTINE SA0136(RDA,IDA,BDA) REAL(R1_KV) RDA(10) INTEGER(I1_KV) IDA(10,9) CHARACTER(9,C1_KV) BDA(10,9,5) INTEGER(I1_KV) ICA(10,9) COMMON /IF/ IF(NPBIG*NPSIZE) EQUIVALENCE (ICA,IF(1)) REAL(R1_KV) RCA(10) COMMON /RF/ RF(NPBIG*NPSIZE) EQUIVALENCE (RCA,RF(1)) CHARACTER(9,C1_KV) BCA(10,9,5) COMMON /BF/ BF(NPBIG*NPSIZE) EQUIVALENCE (BCA,BF(1)) ! I N I T I A L I Z A T I O N S E C T I O N RDA = RCA IDA = ICA BDA = BCA ! T E S T S T A T E M E N T S FORALL (J1 = 1:10) RDA(J1) = RCA(J1) + 1.0_R1_KV FORALL (J2 = 1:9) FORALL (J3 = 1:5) BDA(J1,J2,J3) = "X"//BCA(J1,J2,J3) END FORALL IDA(J1,J2) = ICA(J1,J2) + 1 END FORALL ENDFORALL END SUBROUTINE SUBROUTINE SA0137(RDA,YDA,BDA,IDA,NDS10,NDS9) INTEGER(NF_KV) :: NDS10 INTEGER(NF_KV) :: NDS9 REAL(R1_KV) RDA(NF10) COMPLEX(R2_KV) YDA(NDS10,NF9) CHARACTER(9,C1_KV) BDA(NF10,NDS9,NF5) INTEGER(I1_KV) IDA(NF10) COMPLEX(R2_KV) YCA(10,9) COMMON /YF/ YF(NPBIG*NPSIZE) EQUIVALENCE (YCA,YF(1)) REAL(R1_KV) RCA(10) COMMON /RF/ RF(NPBIG*NPSIZE) EQUIVALENCE (RCA,RF(1)) INTEGER(I1_KV) ICA(10) COMMON /IF/ IF(NPBIG*NPSIZE) EQUIVALENCE (ICA,IF(1)) CHARACTER(9,C1_KV) BCA(10,9,5) COMMON /BF/ BF(NPBIG*NPSIZE) EQUIVALENCE (BCA,BF(1)) ! I N I T I A L I Z A T I O N S E C T I O N RDA(1:10) = RCA YDA(1:10,1:9) = YCA BDA(1:10,1:9,1:5) = BCA IDA(1:10) = ICA ! T E S T S T A T E M E N T S FORALL (J1 = NF1:NF10) RDA(J1) = RCA(J1) + 1.0_R1_KV FORALL (J2 = NF1:NF9) FORALL (J3 = NF1:NF5) BDA(J1,J2,J3) = "X"//BCA(J1,J2,J3) END FORALL YDA(J1,J2) = YCA(J1,J2) + 1 END FORALL IDA(J1) = ICA(J1) + 1 ENDFORALL END SUBROUTINE SUBROUTINE SA0138(RDA,YDA,BDA,IDA,NDS10,NDS9) INTEGER(NF_KV) :: NDS10 INTEGER(NF_KV) :: NDS9 REAL(R1_KV) RDA(NF10) COMPLEX(R2_KV) YDA(NDS10,NF9) CHARACTER(9,C1_KV) BDA(NF10,NDS9,NF5) INTEGER(I1_KV) IDA(NF10) COMPLEX(R2_KV) YCA(10,9) COMMON /YF/ YF(NPBIG*NPSIZE) EQUIVALENCE (YCA,YF(1)) REAL(R1_KV) RCA(10) COMMON /RF/ RF(NPBIG*NPSIZE) EQUIVALENCE (RCA,RF(1)) CHARACTER(9,C1_KV) BCA(10,9,5) COMMON /BF/ BF(NPBIG*NPSIZE) EQUIVALENCE (BCA,BF(1)) INTEGER(I1_KV) ICA(10) COMMON /IF/ IF(NPBIG*NPSIZE) EQUIVALENCE (ICA,IF(1)) ! I N I T I A L I Z A T I O N S E C T I O N RDA(1:10) = RCA YDA(1:10,1:9) = YCA BDA(1:10,1:9,1:5) = BCA IDA(1:10) = ICA J1 = 6 J2 = 7 J3 = 8 ! T E S T S T A T E M E N T S FORALL (J1 = NF1:NF10) RDA(J1) = RDA(J1) + 1.0_R1_KV IDA(J1) = IDA(J1) + 1 FORALL (J2 = NF1:NF9) FORALL (J3 = NF1:NF5) BDA(J1,J2,J3) = "X"//BDA(J1,J2,J3) YDA(J1,J2) = YDA(J1,J2) + 1 END FORALL IDA(J1) = IDA(J1) + 1 ENDFORALL END SUBROUTINE END MODULE TESTS gfortran%gfortran sa0136.f f951.exe: internal compiler error: Segmentation fault Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. -- Summary: internal compiler error with forall Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dick dot hendrickson at gmail dot com http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35820