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

Reply via email to