[flang][runtime] Fix input of NAN(...) on non-fast path
authorPeter Klausler <pklausler@nvidia.com>
Tue, 26 Apr 2022 23:49:29 +0000 (16:49 -0700)
committerPeter Klausler <pklausler@nvidia.com>
Mon, 9 May 2022 19:38:31 +0000 (12:38 -0700)
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

index 3043945..b694749 100644 (file)
@@ -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') ||