[flang-commits] [flang] 2f31b4b - [flang][runtime] Fix input of NAN(...) on non-fast path

Peter Klausler via flang-commits flang-commits at lists.llvm.org
Mon May 9 12:38:46 PDT 2022


Author: Peter Klausler
Date: 2022-05-09T12:38:31-07:00
New Revision: 2f31b4b10a1ab3ec937fbbead55b66b8dfbb0934

URL: https://github.com/llvm/llvm-project/commit/2f31b4b10a1ab3ec937fbbead55b66b8dfbb0934
DIFF: https://github.com/llvm/llvm-project/commit/2f31b4b10a1ab3ec937fbbead55b66b8dfbb0934.diff

LOG: [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

Added: 
    

Modified: 
    flang/runtime/edit-input.cpp

Removed: 
    


################################################################################
diff  --git a/flang/runtime/edit-input.cpp b/flang/runtime/edit-input.cpp
index 304394577861b..b694749ccc226 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') ||


        


More information about the flang-commits mailing list