[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 15:56:31 PST 2026


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

>From b3c1caafeb49ebc55bdfdb25aec03f497d139a7f 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/include/flang/Support/Fortran-features.h | 3 ++-
 flang/lib/Semantics/check-namelist.cpp         | 9 +++++++++
 flang/test/Semantics/namelist02.f90            | 8 ++++++++
 3 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 flang/test/Semantics/namelist02.f90

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