Bug 32315 - DATA with implied-do: Bounds checks missing [regression vs. g77]
Summary: DATA with implied-do: Bounds checks missing [regression vs. g77]
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 4.3.0
: P3 normal
Target Milestone: 4.3.0
Assignee: Paul Thomas
URL:
Keywords: accepts-invalid, diagnostic, ice-on-invalid-code
Depends on:
Blocks: Fortran_bounds_checking 33056
  Show dependency treegraph
 
Reported: 2007-06-13 06:25 UTC by Tobias Burnus
Modified: 2008-02-05 13:06 UTC (History)
3 users (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail: 4.1.3 4.2.0 4.3.0
Last reconfirmed: 2008-02-05 09:36:48


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Tobias Burnus 2007-06-13 06:25:39 UTC
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.)
Comment 1 Tobias Burnus 2007-06-13 06:46:26 UTC
Dump shows:

static char string[4][1:20] = {"A                   ", "B                   ", "C                   ", "D                   ", "E                   " }


Check should probably be in resolve.c's check_data_variable.
Comment 2 Tobias Burnus 2007-06-14 06:43:12 UTC
Using
    data ( string(i) ,i=-3,1 ) / &
        'A', 'B', 'C', 'D', 'E' /
gives even an ICE.
Comment 3 Thomas Koenig 2008-01-20 10:48:30 UTC
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 (^)
$ 

Comment 4 Paul Thomas 2008-02-05 09:36:48 UTC
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
Comment 5 Paul Thomas 2008-02-05 11:17:19 UTC
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

Comment 6 Paul Thomas 2008-02-05 13:06:18 UTC
Fixed on trunk

Paul