[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