[flang-commits] [flang] 8d8a821 - [flang] Support OPEN(..., FORM="BINARY") (#124657)
via flang-commits
flang-commits at lists.llvm.org
Fri Jan 31 10:51:19 PST 2025
Author: Peter Klausler
Date: 2025-01-31T10:51:16-08:00
New Revision: 8d8a821b78305b2e78c7f5deb7e85e6f349608e3
URL: https://github.com/llvm/llvm-project/commit/8d8a821b78305b2e78c7f5deb7e85e6f349608e3
DIFF: https://github.com/llvm/llvm-project/commit/8d8a821b78305b2e78c7f5deb7e85e6f349608e3.diff
LOG: [flang] Support OPEN(..., FORM="BINARY") (#124657)
... as a legacy spelling for OPEN(..., FORM="UNFORMATTED",
ACCESS="STREAM").
Added:
Modified:
flang/docs/Extensions.md
flang/lib/Semantics/check-io.cpp
flang/runtime/io-api.cpp
Removed:
################################################################################
diff --git a/flang/docs/Extensions.md b/flang/docs/Extensions.md
index f25f0d1e0ca392d..e84bceee5ca7c78 100644
--- a/flang/docs/Extensions.md
+++ b/flang/docs/Extensions.md
@@ -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
diff --git a/flang/lib/Semantics/check-io.cpp b/flang/lib/Semantics/check-io.cpp
index 3c99163c1f134f8..42c3b9e11efc1bc 100644
--- a/flang/lib/Semantics/check-io.cpp
+++ b/flang/lib/Semantics/check-io.cpp
@@ -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,
diff --git a/flang/runtime/io-api.cpp b/flang/runtime/io-api.cpp
index 9dfa09ab332c2ad..dc3f6f87fc21b02 100644
--- a/flang/runtime/io-api.cpp
+++ b/flang/runtime/io-api.cpp
@@ -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);
More information about the flang-commits
mailing list