aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Klausler <pklausler@nvidia.com>2026-01-12 15:40:22 -0800
committerGitHub <noreply@github.com>2026-01-12 15:40:22 -0800
commit3874c4541a2e7fe044f02cda962657be35314deb (patch)
treef9764b2abd496ef1142f2aa93ed33768a8c99559
parent3fe94ab4d6aa936c4f8a4bbdd25d1da47d112265 (diff)
downloadllvm-3874c4541a2e7fe044f02cda962657be35314deb.tar.gz
llvm-3874c4541a2e7fe044f02cda962657be35314deb.tar.bz2
llvm-3874c4541a2e7fe044f02cda962657be35314deb.zip
[flang] Handle useless NAMELIST in interface block (#175214)
NAMELIST has no useful purpose in an interface block, but it's allowed. Fix a crash due to our deferred handling of NAMELIST groups in the execution part (which doesn't exist in an interface block). Fixes https://github.com/llvm/llvm-project/issues/175207.
-rw-r--r--flang/lib/Semantics/resolve-names.cpp3
-rw-r--r--flang/test/Semantics/bug175207.f9010
2 files changed, 13 insertions, 0 deletions
diff --git a/flang/lib/Semantics/resolve-names.cpp b/flang/lib/Semantics/resolve-names.cpp
index 527be8645ff8..47ca433e0f7a 100644
--- a/flang/lib/Semantics/resolve-names.cpp
+++ b/flang/lib/Semantics/resolve-names.cpp
@@ -9876,6 +9876,9 @@ void ResolveNamesVisitor::FinishSpecificationPart(
misparsedStmtFuncFound_ = false;
funcResultStack().CompleteFunctionResultType();
CheckImports();
+ if (inInterfaceBlock()) {
+ FinishNamelists(); // NAMELIST is useless in an interface, but allowed
+ }
for (auto &pair : currScope()) {
auto &symbol{*pair.second};
if (inInterfaceBlock()) {
diff --git a/flang/test/Semantics/bug175207.f90 b/flang/test/Semantics/bug175207.f90
new file mode 100644
index 000000000000..63696dfac0b6
--- /dev/null
+++ b/flang/test/Semantics/bug175207.f90
@@ -0,0 +1,10 @@
+!RUN: %python %S/test_errors.py %s %flang_fc1
+interface
+ subroutine sub(x)
+ real x
+ namelist /useless/x ! ok, but don't crash
+ !ERROR: 'sub' is not a variable
+ namelist /bad/sub
+ end
+end interface
+end