Hi GCC Fortran developers! I was playing with some CaSe changing routines and I ran into a crash when I tried to use a FORALL statement instead of a DO loop.
The routine that is failing (from my perspective) is SUBROUTINE TO_UPPER(STR). -- MODULE CASECONV CONTAINS SUBROUTINE TO_UPPER(STR) CHARACTER(*) STR INTEGER I FORALL (I = 1:LEN(STR)) !DO I = 1, LEN(STR) STR(I:I) = UC(STR(I:I)) !END DO END FORALL CONTAINS ELEMENTAL FUNCTION UC(C) CHARACTER, INTENT(IN) :: C CHARACTER :: UC INTEGER, PARAMETER :: DELTA = ICHAR('A') - ICHAR('a') IF (LLE(C, 'z') .AND. LGE(C, 'a')) THEN UC = ACHAR(ICHAR(C) + DELTA) ELSE UC = C END IF END FUNCTION UC END SUBROUTINE TO_UPPER END MODULE CASECONV PROGRAM UCBUG USE CASECONV IMPLICIT NONE CHARACTER(132) :: TESTSTR TESTSTR = 'Hello, World!' PRINT *, TRIM(TESTSTR) CALL TO_UPPER(TESTSTR) PRINT *, TRIM(TESTSTR) END PROGRAM UCBUG -- Summary: Compiler crash on FORALL loop Product: gcc Version: 4.2.1 Status: UNCONFIRMED Severity: normal Priority: P3 Component: fortran AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: holst at matmech dot com GCC host triplet: x86_64-unknown-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34633