[flang-commits] [flang] 2496938 - [flang][runtime] Fix nonadvancing	output edge case
    Peter Klausler via flang-commits 
    flang-commits at lists.llvm.org
       
    Mon Jun 13 10:27:39 PDT 2022
    
    
  
Author: Peter Klausler
Date: 2022-06-13T10:27:27-07:00
New Revision: 2496938522aae3b1aec238397ab276827a06d417
URL: https://github.com/llvm/llvm-project/commit/2496938522aae3b1aec238397ab276827a06d417
DIFF: https://github.com/llvm/llvm-project/commit/2496938522aae3b1aec238397ab276827a06d417.diff
LOG: [flang][runtime] Fix nonadvancing output edge case
When nonadvancing output uses T/TL control edit descriptors to reposition
the record, don't reset the position to the furthest point written at
the end of the write.
Differential Revision: https://reviews.llvm.org/D127420
Added: 
    
Modified: 
    flang/runtime/io-stmt.cpp
Removed: 
    
################################################################################
diff  --git a/flang/runtime/io-stmt.cpp b/flang/runtime/io-stmt.cpp
index b29ab1524be27..98456766ecb93 100644
--- a/flang/runtime/io-stmt.cpp
+++ b/flang/runtime/io-stmt.cpp
@@ -325,10 +325,9 @@ void ExternalIoStatementState<DIR>::CompleteOperation() {
     if (mutableModes().nonAdvancing) {
       // Make effects of positioning past the last Emit() visible with blanks.
       std::int64_t n{unit().positionInRecord - unit().furthestPositionInRecord};
-      unit().positionInRecord = unit().furthestPositionInRecord;
       while (n-- > 0 && unit().Emit(" ", 1, 1, *this)) {
       }
-      unit().leftTabLimit = unit().furthestPositionInRecord;
+      unit().leftTabLimit = unit().positionInRecord;
     } else {
       unit().AdvanceRecord(*this);
     }
        
    
    
More information about the flang-commits
mailing list