From 81d857d037b53cb7abf4ef091e9ba6ec007b5809 Mon Sep 17 00:00:00 2001 From: Peter Klausler Date: Wed, 21 Sep 2022 11:57:12 -0700 Subject: [PATCH] [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 --- flang/docs/Extensions.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md index 9e674c15c2f1..45eea70297f6 100644 --- a/flang/docs/Extensions.md +++ b/flang/docs/Extensions.md @@ -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.