Search code examples
fortrangfortranfortran77g77

Syntax error in DATA statement


I have this code in a Fortran project:

ITEGER IV, IY
DIMENSION IV(NTAB,IDEPTH)
DIMENSION IY(IDEPTH)
DATA IV,IY /(IDEPTH*NTAB)*0,IDEPTH*0)/

Attempting to compile the project generates this error:

    DATA IV,IY /(IDEPTH*NTAB)*0,IDEPTH*0)/
                1

Syntax error in DATA statement at (1).

This worked under f77/g77 (gcc 4.1), but a recent upgrade has moved us to gcc 4.4 and gfortran. Now this code is causing errors but I just can't see the problem.


Solution

  • My guess is that this was an extension to the Standard, which is not supported any more. The FORTRAN 77 Standard, ch. 9.1 states that the repeat value shall be a

    nonzero, unsigned, integer constant or the symbolic name of such a constant.

    As such, the IDEPTH*NTAB is not allowed as repeat value.

    You can circumvent this by using another constant that constitutes the product:

          PROGRAM test
            INTEGER IV, IY
            INTEGER,PARAMETER :: NTAB=1,IDEPTH=1
            INTEGER,PARAMETER :: PROD=NTAB*IDEPTH
    
            DIMENSION IV(NTAB,IDEPTH)
            DIMENSION IY(IDEPTH)
    
            DATA IV,IY /PROD*0,IDEPTH*0/
          END
    

    Or, to make it strictly FORTRAN 77 compliant:

          PROGRAM test
            INTEGER IV, IY
            INTEGER NTAB,IDEPTH
            INTEGER PROD
    
            PARAMETER (NTAB=1,IDEPTH=1)
            PARAMETER (PROD=NTAB*IDEPTH)
    
            DIMENSION IV(NTAB,IDEPTH)
            DIMENSION IY(IDEPTH)
    
            DATA IV,IY /PROD*0,IDEPTH*0/
          END