[flang] Correct INQUIRE(POSITION= & PAD=)
authorPeter Klausler <pklausler@nvidia.com>
Thu, 25 Nov 2021 00:05:37 +0000 (16:05 -0800)
committerPeter Klausler <pklausler@nvidia.com>
Tue, 30 Nov 2021 21:51:48 +0000 (13:51 -0800)
commit80cdf0db67e2c0f231f4fefc2b873690b44f84cc
treea692afeba406928a546eee94ace682c4a71f518c
parent0e85232fa39dbe54b13b40320460dd4f945b29fd
[flang] Correct INQUIRE(POSITION= & PAD=)

INQUIRE(POSITION=)'s results need to reflect the POSITION=
specifier used for the OPEN statement until the unit has been
repositioned.  Preserve the POSITION= from OPEN and used it
for INQUIRE(POSITION=) until is becomes obsolete.

INQUIRE(PAD=) is implemented here in the case of an unconnected unit
with Fortran 2018 semantics; i.e., "UNDEFINED", rather than Fortran 90's
"YES"/"NO" (see 4.3.6 para 2).  Apparent failures with F'90-only tests
will persist with INQUIRE(PAD=); these discrepancies don't seem to warrant
an option or environment variable.

To make the implementation of INQUIRE more closely match the language
in the standard, rename IsOpen() to IsConnected(), and use it explicitly
for the various INQUIRE specifiers.

Differential Revision: https://reviews.llvm.org/D114755
flang/runtime/connection.h
flang/runtime/file.cpp
flang/runtime/file.h
flang/runtime/io-stmt.cpp
flang/runtime/unit.cpp
flang/runtime/unit.h