[flang] Extension: reduced scope for some implied DO loop indices
authorpeter klausler <pklausler@nvidia.com>
Fri, 20 Aug 2021 22:18:21 +0000 (15:18 -0700)
committerpeter klausler <pklausler@nvidia.com>
Tue, 24 Aug 2021 16:34:18 +0000 (09:34 -0700)
commit3265b93363d8540ee96357bfd708cc36b8c89280
tree9d80d7ecaff1ec2e1c1ba6d9ff01b212d68c7df5
parent58582bae6392b4ceef1536c3b4c3326c2fa25049
[flang] Extension: reduced scope for some implied DO loop indices

The index of an implied DO loop in a DATA statement or array
constructor is defined by Fortran 2018 to have scope over its
implied DO loop.  This definition is unfortunate, because it
requires the implied DO loop's bounds expressions to be in the
scope of the index variable.  Consequently, in code like

  integer, parameter :: j = 5
  real, save :: a(5) = [(j, j=1, j)]

the upper bound of the loop is a reference to the index variable,
not the parameter in the enclosing scope.

This patch limits the scope of the index variable to the "body"
of the implied DO loop as one would naturally expect, with a warning.
I would have preferred to make this a hard error, but most Fortran
compilers treat this case as f18 now does.  If the standard
were to be fixed, the warning could be made optional.

Differential Revision: https://reviews.llvm.org/D108595
flang/docs/Extensions.md
flang/lib/Semantics/expression.cpp
flang/lib/Semantics/resolve-names.cpp
flang/test/Semantics/array-constr-values.f90
flang/test/Semantics/data11.f90 [new file with mode: 0644]
flang/test/Semantics/modfile25.f90
flang/test/Semantics/modfile26.f90
flang/test/Semantics/resolve106.f90 [new file with mode: 0644]
flang/test/Semantics/resolve30.f90
flang/test/Semantics/symbol05.f90