mirror of
https://github.com/intel/llvm.git
synced 2026-01-21 04:14:03 +08:00
[flang] Support OPEN(..., FORM="BINARY") (#124657)
... as a legacy spelling for OPEN(..., FORM="UNFORMATTED", ACCESS="STREAM").
This commit is contained in:
@@ -411,6 +411,8 @@ end
|
||||
is accepted before an array specification (`ch*3(2)`) as well
|
||||
as afterwards.
|
||||
* A zero field width is allowed for logical formatted output (`L0`).
|
||||
* `OPEN(..., FORM='BINARY')` is accepted as a legacy synonym for
|
||||
the standard `OPEN(..., FORM='UNFORMATTED', ACCESS='STREAM')`.
|
||||
|
||||
### Extensions supported when enabled by options
|
||||
|
||||
|
||||
@@ -920,7 +920,7 @@ void IoChecker::CheckStringValue(IoSpecKind specKind, const std::string &value,
|
||||
{IoSpecKind::Decimal, {"COMMA", "POINT"}},
|
||||
{IoSpecKind::Delim, {"APOSTROPHE", "NONE", "QUOTE"}},
|
||||
{IoSpecKind::Encoding, {"DEFAULT", "UTF-8"}},
|
||||
{IoSpecKind::Form, {"FORMATTED", "UNFORMATTED"}},
|
||||
{IoSpecKind::Form, {"FORMATTED", "UNFORMATTED", "BINARY"}},
|
||||
{IoSpecKind::Pad, {"NO", "YES"}},
|
||||
{IoSpecKind::Position, {"APPEND", "ASIS", "REWIND"}},
|
||||
{IoSpecKind::Round,
|
||||
|
||||
@@ -887,7 +887,7 @@ bool IODEF(SetForm)(Cookie cookie, const char *keyword, std::size_t length) {
|
||||
io.GetIoErrorHandler().Crash(
|
||||
"SetForm() called after GetNewUnit() for an OPEN statement");
|
||||
}
|
||||
static const char *keywords[]{"FORMATTED", "UNFORMATTED", nullptr};
|
||||
static const char *keywords[]{"FORMATTED", "UNFORMATTED", "BINARY", nullptr};
|
||||
switch (IdentifyValue(keyword, length, keywords)) {
|
||||
case 0:
|
||||
open->set_isUnformatted(false);
|
||||
@@ -895,6 +895,10 @@ bool IODEF(SetForm)(Cookie cookie, const char *keyword, std::size_t length) {
|
||||
case 1:
|
||||
open->set_isUnformatted(true);
|
||||
break;
|
||||
case 2: // legacy FORM='BINARY' means an unformatted stream
|
||||
open->set_isUnformatted(true);
|
||||
open->set_access(Access::Stream);
|
||||
break;
|
||||
default:
|
||||
open->SignalError(IostatErrorInKeyword, "Invalid FORM='%.*s'",
|
||||
static_cast<int>(length), keyword);
|
||||
|
||||
Reference in New Issue
Block a user