f18-llvm-project
f18-llvm-project copied to clipboard
semantic error: Assigned format label must be a scalar variable
./mis/ofp.f:1035:16: error: Assigned format label must be a scalar variable
1950 WRITE (L,FMT) IHARM,(REAL(I),FREAL(I+1),I=1,K2,2)
gfortran spits out warning
./mis/ofp.f:1035.15:
1950 WRITE (L,FMT) IHARM,(REAL(I),FREAL(I+1),I=1,K2,2)
1
Warning: Legacy Extension: Non-character in FORMAT tag at (1)
Note to myself: this is the showstopper to compile https://github.com/nasa/NASTRAN-95
Can you supply more context, please? What are the declared or implicit characteristics of the entity named FMT in the compilation unit? Is it truly the target of an ASSIGN statement from a FORMAT label, or is it perhaps an integer array containing a format string encoded in Hollerith?
This can reproduce the issue:
SUBROUTINE OFP
INTEGER FMT(300)
COMMON /SYSTEM/ KSYSTM(65)
EQUIVALENCE (KSYSTM( 2),L)
WRITE (L,FMT) IHARM,(REAL(I),FREAL(I+1),I=1,K2,2)
END
Is FMT initialized or assigned in the original program? The error is valid for this code snippet and I'm not sure what was intended to happen.
FMT is assigned like
FMT(1) = OPAREN
Okay. And what's OPAREN?
CWKBI
EQUIVALENCE ( CFMT, FMT )
DATA PE / 4H1P,E /, PF / 4H0P,F /
DATA E236 / 4H23.6 /, F236 / 4H14.1 /
DATA E156 / 4H15.6 /, F156 / 4H6.1 /
DATA I8 / 4H,I8, /, I12 / 4H,I11 /
DATA I2X / 4H2X /, I2XX / 4H,2X /
DATA I1X / 4H(1X /, I1XX / 4H,1X /
DATA ISTAR / 4H,1H* /, I15X / 4H/14X /
DATA IH0 / 4H/1H0 /, I1H0 / 4H(1H0 /
DATA I9X / 4H,9X /, I6X / 4H,6X /
DATA F174 / 4H17.4 /
DATA STATIC, REIGEN , FREQ , TRANS , BK1 , CEIGEN /
1 1 , 2 , 5 , 6 , 8 , 9 /
DATA A4 , COMMA , CPAREN, OPAREN /
1 4HA4 , 4H, , 4H) , 4H( /
DATA EEND / 195 /, I15BLK/ 4HA4, , 4H11X /,
1 GSE / 4HG , 4HS , 4HE , 4HM /
DATA FILEX / 101, 102, 103,104, 105 , 106 /
DATA IBLANK, E9PT1 / 4H , 195 /
DATA IHEAT / 4HHEAT /, CENTER/ 4HTER /
DATA PHASE / 4H1P9E /, SCAN / 4HSCAN , 4HNED /
DATA HEX1 , HEX2, HEX3 /4HHEX1, 4HHEX2 , 4HHEX3/
Thank you, that confirms my hypothesis. F18 will have to be extended to support non-character arrays (probably contiguous default integer only) as formats in formatted I/O transfer statements.