[flang-commits] [flang] [flang] Reject PARAMETER constants in NAMELIST groups (PR #178960)

Miguel Saldivar via flang-commits flang-commits at lists.llvm.org
Mon Feb 2 16:47:10 PST 2026


https://github.com/Saldivarcher updated https://github.com/llvm/llvm-project/pull/178960

>From e380f71c1c1a7016008a2d5d3f48c86f05052b71 Mon Sep 17 00:00:00 2001
From: Miguel Saldivar <miguel.saldivar at hpe.com>
Date: Fri, 30 Jan 2026 14:42:45 -0600
Subject: [PATCH] [flang] Reject PARAMETER constants in NAMELIST groups

The Fortran standard does not allow `PARAMETERS` within a
`namelist-group-object`, it should only allow variables.
An error should be emitted when a `PARAMETER` is found within a
`namelist-group-object`.
---
 flang/docs/Extensions.md                       | 12 ++++++++++++
 flang/include/flang/Support/Fortran-features.h |  3 ++-
 flang/lib/Semantics/check-namelist.cpp         |  9 +++++++++
 flang/test/Semantics/namelist02.f90            |  8 ++++++++
 4 files changed, 31 insertions(+), 1 deletion(-)
 create mode 100644 flang/test/Semantics/namelist02.f90

diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md
index 493bb10af6f85..7dc0634293af1 100644
--- a/flang/docs/Extensions.md
+++ b/flang/docs/Extensions.md
@@ -481,6 +481,18 @@ end
 * A data object can be initialized multiple times by `DATA` statements
   and default component initialization, but only when all initializations
   are to the same value.  Distinct initializations remain errors.
+* A named constant (`PARAMETER`) may appear as a `namelist-group-object` in a
+  `NAMELIST` statement.  The Fortran standard requires namelist group objects
+  to be variables, but this usage is accepted by Flang as an extension.
+  When `-pedantic` is enabled, Flang emits a warning for this case.
+  For example:
+```
+program p
+  implicit none
+  integer, parameter :: k = 3
+  namelist /g/ k
+end program
+```
 
 ### Extensions supported when enabled by options
 
diff --git a/flang/include/flang/Support/Fortran-features.h b/flang/include/flang/Support/Fortran-features.h
index c847e6d509878..fd0835689e78f 100644
--- a/flang/include/flang/Support/Fortran-features.h
+++ b/flang/include/flang/Support/Fortran-features.h
@@ -80,7 +80,8 @@ ENUM_CLASS(UsageWarning, Portability, PointerToUndefinable,
     NullActualForDefaultIntentAllocatable, UseAssociationIntoSameNameSubprogram,
     HostAssociatedIntentOutInSpecExpr, NonVolatilePointerToVolatile,
     RealConstantWidening, VolatileOrAsynchronousTemporary, UnusedVariable,
-    UsedUndefinedVariable, BadValueInDeadCode, AssumedTypeSizeDummy)
+    UsedUndefinedVariable, BadValueInDeadCode, AssumedTypeSizeDummy,
+    NamelistParameter)
 
 using LanguageFeatures = EnumSet<LanguageFeature, LanguageFeature_enumSize>;
 using UsageWarnings = EnumSet<UsageWarning, UsageWarning_enumSize>;
diff --git a/flang/lib/Semantics/check-namelist.cpp b/flang/lib/Semantics/check-namelist.cpp
index c2804c5d874e9..3dd9e7fdb8bc5 100644
--- a/flang/lib/Semantics/check-namelist.cpp
+++ b/flang/lib/Semantics/check-namelist.cpp
@@ -28,6 +28,15 @@ void NamelistChecker::Leave(const parser::NamelistStmt &nmlStmt) {
                 "PUBLIC namelist"_err_en_US,
                 nmlObjSymbol->name());
           }
+          // `namelist-group-object` may only contain variables.
+          if (nmlObjSymbol->attrs().test(Attr::PARAMETER)) {
+            if (context_.ShouldWarn(common::UsageWarning::NamelistParameter)) {
+              context_.Say(nmlObjName.source,
+                  "A namelist group object '%s' must not be a "
+                  "PARAMETER"_warn_en_US,
+                  nmlObjSymbol->name());
+            }
+          }
         }
       }
     }
diff --git a/flang/test/Semantics/namelist02.f90 b/flang/test/Semantics/namelist02.f90
new file mode 100644
index 0000000000000..fd2a9c90077fa
--- /dev/null
+++ b/flang/test/Semantics/namelist02.f90
@@ -0,0 +1,8 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic -Werror
+
+program p
+  implicit none
+  integer, parameter :: k = 3
+  !WARNING: A namelist group object 'k' must not be a PARAMETER
+  namelist /g/ k
+end program



More information about the flang-commits mailing list