Skip to content

Commit

Permalink
[flang] Set "undefined" NEXTREC=n variable to 0 rather than random ga…
Browse files Browse the repository at this point in the history
…rbage

12.10.2.17 defines that a INQUIRE statement's NEXTREC=n output value
for a unit that is not connected for direct access becomes undefined,
but the current I/O runtime can fail in a confusing manner by trying
to return uninitialized stack garbage.

Reported on Slack by Tarun Prabhu as an intermittent failure in
the gfortran regression test inquire_pre.f90.

Differential Revision: https://reviews.llvm.org/D152295
  • Loading branch information
klausler committed Jun 6, 2023
1 parent 9a81b69 commit e468f07
Showing 1 changed file with 2 additions and 3 deletions.
5 changes: 2 additions & 3 deletions flang/runtime/io-api.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1451,15 +1451,14 @@ bool IONAME(InquirePendingId)(Cookie cookie, std::int64_t id, bool &result) {
bool IONAME(InquireInteger64)(
Cookie cookie, InquiryKeywordHash inquiry, std::int64_t &result, int kind) {
IoStatementState &io{*cookie};
std::int64_t n;
std::int64_t n{0}; // safe "undefined" value
if (io.Inquire(inquiry, n)) {
if (SetInteger(result, kind, n)) {
return true;
}
io.GetIoErrorHandler().SignalError(
"InquireInteger64(): bad INTEGER kind(%d) or out-of-range "
"value(%jd) "
"for result",
"value(%jd) for result",
kind, static_cast<std::intmax_t>(n));
}
return false;
Expand Down

0 comments on commit e468f07

Please sign in to comment.