[flang][NFC] Document ambiguous case of DATA in BLOCK

Fortran is not clear about the semantics of

```
  subroutine subr
    integer n = 1
    block
      data n/2/
    end block
  end subroutine
```

which could be interpreted as having two variables, each
named 'n', or as having one variable 'n' with invalid double
initialization.  Precedents from existing compilers are also
in disagreement.

The most common interpretation, however, agrees with a subtle
reading of the standard: BLOCK constructs scope names that have
local specifications, and a DATA statement is a declaration
construct, not a specification construct.  So this example is
*not* acceptable.

Differential Revision: https://reviews.llvm.org/D134391
This commit is contained in:
Peter Klausler 2022-09-21 11:57:12 -07:00
parent 10409bf86e
commit 81d857d037
1 changed files with 22 additions and 0 deletions

View File

@ -415,3 +415,25 @@ end
to some forms of input in this situation.)
For sequential formatted output, RECL= serves as a limit on record lengths
that raises an error when it is exceeded.
* When a `DATA` statement in a `BLOCK` construct could be construed as
either initializing a host-associated object or declaring a new local
initialized object, f18 interprets the standard's classification of
a `DATA` statement as being a "declaration" rather than a "specification"
construct, and notes that the `BLOCK` construct is defined as localizing
names that have specifications in the `BLOCK` construct.
So this example will elicit an error about multiple initialization:
```
subroutine subr
integer n = 1
block
data n/2/
end block
end subroutine
```
Other Fortran compilers disagree with each other in their interpretations
of this example.
The precedent among the most commonly used compilers
agrees with f18's interpretation: a `DATA` statement without any other
specification of the name refers to the host-associated object.