From 2f31b4b10a1ab3ec937fbbead55b66b8dfbb0934 Mon Sep 17 00:00:00 2001 From: Peter Klausler Date: Tue, 26 Apr 2022 16:49:29 -0700 Subject: [PATCH] [flang][runtime] Fix input of NAN(...) on non-fast path The closing parenthesis needs to be consumed when a NaN with parenthesized (ignored) information is read on the real input path that preprocesses input characters before passing them to the decimal-to-binary converter. Differential Revision: https://reviews.llvm.org/D125048 --- flang/runtime/edit-input.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/flang/runtime/edit-input.cpp b/flang/runtime/edit-input.cpp index 304394577861..b694749ccc22 100644 --- a/flang/runtime/edit-input.cpp +++ b/flang/runtime/edit-input.cpp @@ -217,17 +217,19 @@ static int ScanRealInput(char *buffer, int bufferSize, IoStatementState &io, if (next && *next == '(') { // NaN(...) Put('('); int depth{1}; - do { + while (true) { next = io.NextInField(remaining, edit); - if (!next) { + if (depth == 0) { break; + } else if (!next) { + return 0; // error } else if (*next == '(') { ++depth; } else if (*next == ')') { --depth; } Put(*next); - } while (depth > 0); + } } exponent = 0; } else if (first == decimal || (first >= '0' && first <= '9') ||