[flang-commits] [flang] [flang][runtime] Skip unused truncated list-directed character input (PR #118320)

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Mon Dec 2 08:38:58 PST 2024


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

When reading non-delimited list-directed character input, read the whole field even if it doesn't fit into the variable.

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

>From f4b4ae37c1fc22eb96c3a66f46a292fbed2d70b6 Mon Sep 17 00:00:00 2001
From: Peter Klausler <pklausler at nvidia.com>
Date: Mon, 2 Dec 2024 08:36:44 -0800
Subject: [PATCH] [flang][runtime] Skip unused truncated list-directed
 character input

When reading non-delimited list-directed character input, read the
whole field even if it doesn't fit into the variable.

Fixes https://github.com/llvm/llvm-project/issues/118277.
---
 flang/runtime/edit-input.cpp | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/flang/runtime/edit-input.cpp b/flang/runtime/edit-input.cpp
index 2cee35e23f31a3..a8c52ea93a6109 100644
--- a/flang/runtime/edit-input.cpp
+++ b/flang/runtime/edit-input.cpp
@@ -979,7 +979,7 @@ static RT_API_ATTRS bool EditListDirectedCharacterInput(
   // or the end of the current record.  Subtlety: the "remaining" count
   // here is a dummy that's used to avoid the interpretation of separators
   // in NextInField.
-  Fortran::common::optional<int> remaining{length > 0 ? maxUTF8Bytes : 0};
+  Fortran::common::optional<int> remaining{maxUTF8Bytes};
   while (Fortran::common::optional<char32_t> next{
       io.NextInField(remaining, edit)}) {
     bool isSep{false};
@@ -1005,8 +1005,11 @@ static RT_API_ATTRS bool EditListDirectedCharacterInput(
     if (isSep) {
       remaining = 0;
     } else {
-      *x++ = *next;
-      remaining = --length > 0 ? maxUTF8Bytes : 0;
+      if (length > 0) {
+        *x++ = *next;
+        --length;
+      }
+      remaining = maxUTF8Bytes;
     }
   }
   Fortran::runtime::fill_n(x, length, ' ');



More information about the flang-commits mailing list