[flang-commits] [flang] c5729f2 - [flang] Set default form if unspecified at end of OPEN statement

Jean Perier via flang-commits flang-commits at lists.llvm.org
Tue Aug 31 23:41:04 PDT 2021


Author: Jean Perier
Date: 2021-09-01T08:40:43+02:00
New Revision: c5729f2e638a792759a53c28fbe39a22ede86943

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

LOG: [flang] Set default form if unspecified at end of OPEN statement

The standard specifies that the form must be set to a default at the
end of an open statement (C.7.4 point 2) where it was not specified.
Only in the case of a pre-connected unit can the form be deferred
until the first data transfer statement.

Set back the default form setting in OpenStatementState::EndIoStatement
that had been removed when deferring the pre-connected unit from setting
in 199a623ebf808a01e920ebd9904c99e633c33a1f.

Also return "UNDEFINED" instead of "UNKNOWN" to the FORM inquiry when the
form was not yet specified as defined in 12.10.2.12.

Related test: syntax 215a216.

Differential Revision: https://reviews.llvm.org/D108990

Added: 
    

Modified: 
    flang/runtime/io-stmt.cpp

Removed: 
    


################################################################################
diff  --git a/flang/runtime/io-stmt.cpp b/flang/runtime/io-stmt.cpp
index fc1dcbf37e15d..cd4a6cc62cd58 100644
--- a/flang/runtime/io-stmt.cpp
+++ b/flang/runtime/io-stmt.cpp
@@ -243,6 +243,10 @@ int OpenStatementState::EndIoStatement() {
     }
     unit().isUnformatted = *isUnformatted_;
   }
+  if (!unit().isUnformatted) {
+    // Set default format (C.7.4 point 2).
+    unit().isUnformatted = unit().access != Access::Sequential;
+  }
   return ExternalIoStatementBase::EndIoStatement();
 }
 
@@ -969,7 +973,7 @@ bool InquireUnitState::Inquire(
                                               : "ASCII";
     break;
   case HashInquiryKeyword("FORM"):
-    str = !unit().isUnformatted ? "UNKNOWN"
+    str = !unit().isUnformatted ? "UNDEFINED"
         : *unit().isUnformatted ? "UNFORMATTED"
                                 : "FORMATTED";
     break;


        


More information about the flang-commits mailing list