Found at: http://groups.google.com/group/comp.lang.fortran/browse_thread/thread/34f509b6b4241c6d/ program chkdata character(len=20), dimension(4) :: string data ( string(i) ,i=1,5 ) / & 'A', 'B', 'C', 'D', 'E' / write(*,*) string end program chkdata gfortran gives no warning/error whereas NAG f95 rejects it with: Error line 5: First subscript (5) is greater than upper bound (4) for array STRING and g95 rejects it with: Error: Out of bounds array reference at (1) and sunf95 with: ERROR: The upper bound for dimension 1 of the array STRING is out of range. (ifort does the same as gfortran: It accepts it.)
Dump shows: static char string[4][1:20] = {"A ", "B ", "C ", "D ", "E " } Check should probably be in resolve.c's check_data_variable.
Using data ( string(i) ,i=-3,1 ) / & 'A', 'B', 'C', 'D', 'E' / gives even an ICE.
This is a regression vs. g77: $ cat foo.f program chkdata character*20 string(4) data ( string(i) ,i=1,5 ) /'A', 'B', 'C', 'D', 'E' / write(*,*) string end $ g77 foo.f foo.f: In program `chkdata': foo.f:3: data ( string(i) ,i=1,5 ) /'A', 'B', 'C', 'D', 'E' / ^ Attempt to specify second initial value for `string' at (^) $ cat bar.f program chkdata character*20 string(4) data ( string(i) ,i=-3,1 ) /'A', 'B', 'C', 'D', 'E' / write(*,*) string end $ g77 bar.f Array subscript #1 out of range for initialization of `string' in statement at (1) Array subscript #1 out of range for initialization of `string' in statement at (1) bar.f: In program `chkdata': bar.f:3: data ( string(i) ,i=-3,1 ) /'A', 'B', 'C', 'D', 'E' / ^ Attempt to specify second initial value for element of `string' at (^) Array subscript #1 out of range for initialization of `string' in statement at (1) bar.f:3: data ( string(i) ,i=-3,1 ) /'A', 'B', 'C', 'D', 'E' / ^ Attempt to specify second initial value for element of `string' at (^) Array subscript #1 out of range for initialization of `string' in statement at (1) bar.f:3: data ( string(i) ,i=-3,1 ) /'A', 'B', 'C', 'D', 'E' / ^ Attempt to specify second initial value for element of `string' at (^) bar.f:3: data ( string(i) ,i=-3,1 ) /'A', 'B', 'C', 'D', 'E' / ^ Attempt to specify second initial value for element of `string' at (^) $
I have just posted a patch, so I had better take the PR on! http://gcc.gnu.org/ml/fortran/2008-02/msg00027.html Paul
Subject: Bug 32315 Author: pault Date: Tue Feb 5 11:16:33 2008 New Revision: 132113 URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=132113 Log: 2008-02-05 Paul Thomas <pault@gcc.gnu.org> PR fortran/32315 * data.c (gfc_assign_data_value): Add bounds check for array references. 2008-02-05 Paul Thomas <pault@gcc.gnu.org> PR fortran/32315 * gfortran.dg/data_bounds_1.f90: New test. Added: trunk/gcc/testsuite/gfortran.dg/data_bounds_1.f90 Modified: trunk/gcc/fortran/ChangeLog trunk/gcc/fortran/data.c trunk/gcc/testsuite/ChangeLog
Fixed on trunk Paul