[flang-commits] [flang] [llvm] [flang-rt] Split large unformatted sequential records into subrecords (PR #213003)
via flang-commits
flang-commits at lists.llvm.org
Fri Oct 16 03:16:45 PDT 2026
================
@@ -376,21 +472,28 @@ bool ExternalFileUnit::AdvanceRecord(IoErrorHandler &handler) {
}
} else if (*isUnformatted) {
if (access == Access::Sequential) {
- // Append the length of a sequential unformatted variable-length record
- // as its footer, then overwrite the reserved first four bytes of the
- // record with its length as its header. These four bytes were skipped
- // over in BeginUnformattedIO<Output>().
- // TODO: Break very large records up into subrecords with negative
- // headers &/or footers
- std::uint32_t length;
- length = furthestPositionInRecord - sizeof length;
- ok = ok &&
- Emit(reinterpret_cast<const char *>(&length), sizeof length,
- sizeof length, handler);
- positionInRecord = 0;
- ok = ok &&
- Emit(reinterpret_cast<const char *>(&length), sizeof length,
- sizeof length, handler);
+ std::size_t payload{
+ static_cast<std::size_t>(furthestPositionInRecord - kRecMarkSize)};
+ if (payload <= static_cast<std::size_t>(kMaxSubrecPayload)) {
----------------
ejose02 wrote:
Done. payload > *openRecl before subrecord layout.
https://github.com/llvm/llvm-project/pull/213003
More information about the flang-commits
mailing list