[llvm] [flang][runtime] Fix bug with NAMELIST in child input (PR #159173)

Peter Klausler via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 16 13:53:51 PDT 2025


https://github.com/klausler created https://github.com/llvm/llvm-project/pull/159173

Don't let "hitSlash_" flag in child input propagate back to the parent input statement's state when the child input was NAMELIST and the NAMELIST input has properly consumed the terminal '/' character.  (It can get set if NAMELIST item input ran into it.) The current failure to reset that flag is causing list-directed parent input to stop early.

Fixes https://github.com/llvm/llvm-project/issues/159127.

>From b597bad12fcda68524b9340d636b8ccbf8558856 Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Tue, 16 Sep 2025 13:47:57 -0700
Subject: [PATCH] [flang][runtime] Fix bug with NAMELIST in child input

Don't let "hitSlash_" flag in child input propagate back to the
parent input statement's state when the child input was NAMELIST
and the NAMELIST input has properly consumed the terminal '/'
character.  (It can get set if NAMELIST item input ran into it.)
The current failure to reset that flag is causing list-directed
parent input to stop early.

Fixes https://github.com/llvm/llvm-project/issues/159127.
---
 flang-rt/lib/runtime/namelist.cpp | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/flang-rt/lib/runtime/namelist.cpp b/flang-rt/lib/runtime/namelist.cpp
index 79dbe4b822921..fbc71faa52416 100644
--- a/flang-rt/lib/runtime/namelist.cpp
+++ b/flang-rt/lib/runtime/namelist.cpp
@@ -596,6 +596,12 @@ bool IODEF(InputNamelist)(Cookie cookie, const NamelistGroup &group) {
   }
   if (next && *next == '/') {
     io.HandleRelativePosition(byteCount);
+    if (auto *listInput{
+            io.get_if<ListDirectedStatementState<Direction::Input>>()}) {
+      // Don't let the namelist's terminal '/' mess up a parent I/O's
+      // list-directed input.
+      listInput->set_hitSlash(false);
+    }
   } else if (*next && (*next == '&' || *next == '$')) {
     // stop at beginning of next group
   } else {



More information about the llvm-commits mailing list