[flang-commits] [flang] [flang][docs] Extensions.md audit (PR #202331)
Eugene Epshteyn via flang-commits
flang-commits at lists.llvm.org
Mon Jun 8 05:53:19 PDT 2026
https://github.com/eugeneepshteyn created https://github.com/llvm/llvm-project/pull/202331
Ensure that information in Extensions.md corresponds to the source code.
Assisted-by: AI
>From 09154d6da678a25f0dbca7f15e32ba9b2d367c24 Mon Sep 17 00:00:00 2001
From: Eugene Epshteyn <eepshteyn at nvidia.com>
Date: Mon, 8 Jun 2026 08:50:13 -0400
Subject: [PATCH] [flang][docs] Extensions.md audit
Ensure that information in Extensions.md corresponds to the source code.
Assisted-by: AI
---
flang/docs/Extensions.md | 61 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 58 insertions(+), 3 deletions(-)
diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md
index f86073db20224..203a48777d7e9 100644
--- a/flang/docs/Extensions.md
+++ b/flang/docs/Extensions.md
@@ -255,7 +255,7 @@ end
* `.NOT. .NOT.` accepted
* `NAME=` as synonym for `FILE=`
* Data edit descriptors without width or other details
-* `D` lines in fixed form as comments or debug code
+* `D` lines in fixed form source are treated as comments by default
* `CARRIAGECONTROL=` on the OPEN and INQUIRE statements
* `CONVERT=` on the OPEN and INQUIRE statements
* `DISPOSE=` on the OPEN and INQUIRE statements
@@ -529,6 +529,54 @@ end program
* When the argument to intrinsic `ALLOCATED(p)` is actually a pointer
rather than an allocatable, it is interpreted as `ASSOCIATED(p)` with a
stern warning.
+* PowerPC `VECTOR(type)`, `__VECTOR_PAIR`, and `__VECTOR_QUAD` type specifiers
+ are accepted as an altivec extension, with a portability warning.
+* Multiple program units may appear on the same source line, separated by
+ semicolons; the standard requires each program unit to begin on a new line.
+ A portability warning is emitted.
+* Branching into a DO loop body from outside the loop via `GO TO` or arithmetic
+ `IF` is accepted with a portability warning.
+* Branching (via `GO TO` or `ASSIGN`/assigned `GO TO`) to a label that is not
+ a standard branch target is accepted with a portability warning.
+* A labeled `DO` loop is allowed to end at any labeled executable statement,
+ not only `END DO` or `CONTINUE`, with a portability warning.
+* Names that exceed the maximum length of 63 characters (F2023 C612) are
+ accepted with a portability warning.
+* An element of a contiguous `POINTER` or assumed-shape array may be used as
+ the initial element of a storage sequence (sequence association), with a
+ portability warning.
+* A variable in an OpenMP `THREADPRIVATE` directive that also appears in an
+ `EQUIVALENCE` statement is accepted as an OpenMP extension, with a portability
+ warning.
+* A Cray `POINTER` pointee whose type is a derived type that is neither
+ `SEQUENCE` nor `BIND(C)` is accepted with a portability warning.
+* A named `COMMON` block may have different total sizes in different scoping
+ units, with a portability warning.
+* A Hollerith literal constant may be passed to an unlimited polymorphic
+ (`CLASS(*)`) dummy argument, treated as if it were `CHARACTER`, with a
+ portability warning.
+* `C_PTR` and `C_DEVPTR` values from `ISO_C_BINDING` may appear directly in
+ formatted I/O lists without defined I/O, with a portability warning.
+* `INTENT`, `VALUE`, or `OPTIONAL` attributes on a variable that is not a
+ dummy argument are accepted with a portability warning.
+* A dummy argument may be used in a specification expression before its
+ explicit type declaration when its implicit type would differ from the
+ declared type, with a portability warning.
+* A duplicate `DEFAULT(NONE)` locality specification in a `DO CONCURRENT`
+ construct is accepted with a portability warning.
+* Some generic interfaces whose specific procedures are formally
+ indistinguishable under F2023 15.4.3.4.5 are accepted when no ambiguous
+ call is possible (extending the `DistinguishableSpecifics` extension
+ documented above).
+* A Hollerith or character literal constant may be passed to a scalar dummy
+ argument of a numeric type and is treated as a BOZ typeless value, with a
+ portability warning.
+* `NULL()` as an actual argument associated with an `INTENT(IN) ALLOCATABLE`
+ dummy argument is accepted with a portability warning.
+* `NULL(MOLD=...)` with a non-null pointer mold may be used as the explicit
+ value of an `ALLOCATABLE` component in a structure constructor, with a
+ portability warning. (Bare `NULL()` for `ALLOCATABLE` components is
+ standard-conforming per F2023 7.5.10 p6.)
### Extensions supported when enabled by options
@@ -567,6 +615,15 @@ end program
legacy code; legacy code should be updated to be correct.
This could be removed at any time.
[-frelaxed-c-loc-checks]
+* All variables in every scoping unit implicitly have the `SAVE` attribute,
+ equivalent to a blanket `SAVE` statement. [-fno-automatic]
+* All local variables in the main program implicitly have the `SAVE` attribute.
+ [-fsave-main-program]
+* Each specification part is treated as if it has `IMPLICIT NONE(EXTERNAL)`,
+ requiring all procedures to have explicit interfaces.
+ [-fimplicit-none-ext]
+* `D` lines in fixed form source are treated as executable code rather than
+ comments. [-fd-lines-as-code]
### Extensions and legacy features deliberately not supported
@@ -589,7 +646,6 @@ end program
* ALLOCATE(TYPE(derived)::...) as variant of correct ALLOCATE(derived::...) (PGI only)
* Defining an explicit interface for a subprogram within itself (PGI only)
* USE association of a procedure interface within that same procedure's definition
-* NULL() as a structure constructor expression for an ALLOCATABLE component (PGI).
* Conversion of LOGICAL to INTEGER in expressions.
* Use of INTEGER data with the intrinsic logical operators `.NOT.`, `.AND.`, `.OR.`,
and `.XOR.`.
@@ -615,7 +671,6 @@ end program
PGI converts the arguments while Intel and XLF replace the specific by the related generic.
* VMS listing control directives (`%LIST`, `%NOLIST`, `%EJECT`)
* Continuation lines on `INCLUDE` lines
-* `NULL()` actual argument corresponding to an `ALLOCATABLE` dummy data object
* User (non-intrinsic) `ELEMENTAL` procedures may not be passed as actual
arguments, in accordance with the standard; some Fortran compilers
permit such usage.
More information about the flang-commits
mailing list