https://gcc.gnu.org/bugzilla/show_bug.cgi?id=87753
Bug ID: 87753
Summary: READ statement with nested implied do broken with
optimization
Product: gcc
Version: 8.2.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: hvandam at bnl dot gov
Target Milestone: ---
Created attachment 44899
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=44899&action=edit
The test program demonstrating the problem
I have code snippet that uses an implied do loop when reading some data from a
file. Dependent on the level of optimization the code either reads the data
correctly or does not seem to read any data at all. Compiling with the -Wall
and -Wextra flags it seems that some of the variables in the implied do loop
are mistaken for functions if the optimization is turned on.
The code is (file "test.F"):
program test
implicit none
integer, parameter :: mxj = 3
integer :: numj = mxj
integer :: numi(mxj) = (/5,3,1/)
integer :: anum(5,mxj)
integer :: ii, jj
anum=0
open(unit=10,file="input.dat",status="old")
read(10,*)((anum(ii,jj),ii=1,numi(jj)),jj=1,numj)
do ii=1,maxval(numi)
write(*,*)(anum(ii,jj),jj=1,numj)
enddo
close(10)
end
The data file "input.dat" contains:
11 12 13 14 15 21 22 23 31
Compiling the code and running it gives:
$ gfortran -Wall -Wextra test.F
$ ./a.out
11 21 31
12 22 0
13 23 0
14 0 0
15 0 0
$ gfortran -Wall -Wextra -O1 test.F
test.F:10:0:
read(10,*)((anum(ii,jj),ii=1,numi(jj)),jj=1,numj)
Warning: ‘jj’ is used uninitialized in this function [-Wuninitialized]
$ ./a.out
0 0 0
0 0 0
0 0 0
0 0 0
0 0 0
The warning makes no sense because jj is neither uninitialized nor used in a
function. The resulting code is clearly broken. Higher optimization levels
generate the same wrong results (-O2 and -O3). Turning optimization off (with
-O0) produces the same correct result as specifying no optimization flags.
GFortran version (I tried locating 8.2.1 and 9.0 but could not find those on
any of the mirror sites):
$ gfortran --version
GNU Fortran (GCC) 8.2.0
Copyright (C) 2018 Free Software Foundation, Inc.
Operating system:
$ uname -a
Linux host 2.6.32-220.el6.x86_64 #1 SMP Sat Dec 10 17:04:11 CST 2011 x86_64
x86_64 x86_64 GNU/Linux
GCC configure line:
$ ./configure --prefix=/home/username --disable-multilib