[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 199a623ebf
.
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
This commit is contained in:
parent
a78dd726f4
commit
c5729f2e63
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue