[flang-commits] [PATCH] D152295: [flang] Set "undefined" NEXTREC=n variable to 0 rather than random garbage
Peter Klausler via Phabricator via flang-commits
flang-commits at lists.llvm.org
Tue Jun 6 11:44:05 PDT 2023
klausler created this revision.
klausler added a reviewer: tarunprabhu.
klausler added a project: Flang.
Herald added subscribers: sunshaoce, jdoerfert.
Herald added a project: All.
klausler requested review of this revision.
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.
https://reviews.llvm.org/D152295
Files:
flang/runtime/io-api.cpp
Index: flang/runtime/io-api.cpp
===================================================================
--- flang/runtime/io-api.cpp
+++ flang/runtime/io-api.cpp
@@ -1451,15 +1451,14 @@
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;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D152295.528964.patch
Type: text/x-patch
Size: 756 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/flang-commits/attachments/20230606/951c852b/attachment-0001.bin>
More information about the flang-commits
mailing list