[flang-commits] [flang] [flang] Reject PARAMETER constants in NAMELIST groups (PR #178960)
Miguel Saldivar via flang-commits
flang-commits at lists.llvm.org
Fri Feb 27 16:01:19 PST 2026
https://github.com/Saldivarcher updated https://github.com/llvm/llvm-project/pull/178960
>From 3b654b6477ac34179557ae254bd46d52164acf22 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 ++++++++
.../include/flang/Support/Fortran-features.h | 2 +-
flang/lib/Semantics/check-namelist.cpp | 8 +++++
flang/test/Semantics/namelist02.f90 | 29 +++++++++++++++++++
4 files changed, 50 insertions(+), 1 deletion(-)
create mode 100644 flang/test/Semantics/namelist02.f90
diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md
index 028e3ea80623f..a997980ca18e7 100644
--- a/flang/docs/Extensions.md
+++ b/flang/docs/Extensions.md
@@ -484,6 +484,18 @@ end
* A pointer component that has no default initialization or explicit value
in a structure constructor is defaulted to `NULL()`.
* An assumed-rank entity is an acceptable `NAMELIST` group item.
+* 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 e5cf915e9f78b..cbcb3592f04c3 100644
--- a/flang/include/flang/Support/Fortran-features.h
+++ b/flang/include/flang/Support/Fortran-features.h
@@ -82,7 +82,7 @@ ENUM_CLASS(UsageWarning, Portability, PointerToUndefinable,
HostAssociatedIntentOutInSpecExpr, NonVolatilePointerToVolatile,
RealConstantWidening, VolatileOrAsynchronousTemporary, UnusedVariable,
UsedUndefinedVariable, BadValueInDeadCode, AssumedTypeSizeDummy,
- MisplacedIgnoreTKR)
+ MisplacedIgnoreTKR, 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..eedc1a66b563e 100644
--- a/flang/lib/Semantics/check-namelist.cpp
+++ b/flang/lib/Semantics/check-namelist.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "check-namelist.h"
+#include "flang/Semantics/tools.h"
namespace Fortran::semantics {
@@ -28,6 +29,13 @@ void NamelistChecker::Leave(const parser::NamelistStmt &nmlStmt) {
"PUBLIC namelist"_err_en_US,
nmlObjSymbol->name());
}
+ // `namelist-group-object` may only contain variables.
+ if (IsNamedConstant(*nmlObjSymbol)) {
+ context_.Warn(common::UsageWarning::NamelistParameter,
+ nmlObjName.source,
+ "A namelist group object '%s' should not be a PARAMETER"_port_en_US,
+ nmlObjSymbol->name());
+ }
}
}
}
diff --git a/flang/test/Semantics/namelist02.f90 b/flang/test/Semantics/namelist02.f90
new file mode 100644
index 0000000000000..efe1f0204abd1
--- /dev/null
+++ b/flang/test/Semantics/namelist02.f90
@@ -0,0 +1,29 @@
+! RUN: %python %S/test_errors.py %s %flang_fc1 -pedantic -Werror
+
+module m
+ implicit none
+ integer, parameter :: mc = 42
+end module
+
+! Local named constant
+program p
+ use m
+ implicit none
+ integer, parameter :: k = 3
+ !PORTABILITY: A namelist group object 'k' should not be a PARAMETER [-Wnamelist-parameter]
+ namelist /g/ k
+ ! USE-associated named constant
+ !PORTABILITY: A namelist group object 'mc' should not be a PARAMETER [-Wnamelist-parameter]
+ namelist /g2/ mc
+end program
+
+! Host-associated named constant
+subroutine host
+ implicit none
+ integer, parameter :: hc = 10
+ contains
+ subroutine inner
+ !PORTABILITY: A namelist group object 'hc' should not be a PARAMETER [-Wnamelist-parameter]
+ namelist /g3/ hc
+ end subroutine
+end subroutine
More information about the flang-commits
mailing list