|
Revision tags: llvmorg-20.1.0, llvmorg-20.1.0-rc3, llvmorg-20.1.0-rc2, llvmorg-20.1.0-rc1, llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6, llvmorg-19.1.5, llvmorg-19.1.4, llvmorg-19.1.3, llvmorg-19.1.2, llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init, llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init, llvmorg-16.0.6, llvmorg-16.0.5, llvmorg-16.0.4, llvmorg-16.0.3, llvmorg-16.0.2, llvmorg-16.0.1, llvmorg-16.0.0, llvmorg-16.0.0-rc4, llvmorg-16.0.0-rc3, llvmorg-16.0.0-rc2, llvmorg-16.0.0-rc1, llvmorg-17-init, llvmorg-15.0.7, llvmorg-15.0.6, llvmorg-15.0.5, llvmorg-15.0.4, llvmorg-15.0.3, llvmorg-15.0.2, llvmorg-15.0.1, llvmorg-15.0.0, llvmorg-15.0.0-rc3, llvmorg-15.0.0-rc2, llvmorg-15.0.0-rc1, llvmorg-16-init |
|
| #
cb193931 |
| 08-Jul-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'
Most of the infrastructure for DECIMAL='COMMA' mode was in place in the I/O runtime support library, but I dropped the ba
[flang][runtime] Complete list-directed character input with DECIMAL='COMMA'
Most of the infrastructure for DECIMAL='COMMA' mode was in place in the I/O runtime support library, but I dropped the ball for list-directed character input, which has its own detection of input separators. Finish the job.
Differential Revision: https://reviews.llvm.org/D129679
show more ...
|
| #
e3611f82 |
| 07-Jul-2022 |
Peter Steinfeld <[email protected]> |
[flang] Fix typo in runtime message
The title says it.
Differential Revision: https://reviews.llvm.org/D129329
|
|
Revision tags: llvmorg-14.0.6 |
|
| #
1650fb8a |
| 17-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Respect PAD='NO' on READ/WRITE
The check for the PAD= setting should examine the mutable modes of the current I/O statement, not the persistent modes of the I/O unit.
Differential
[flang][runtime] Respect PAD='NO' on READ/WRITE
The check for the PAD= setting should examine the mutable modes of the current I/O statement, not the persistent modes of the I/O unit.
Differential Revision: https://reviews.llvm.org/D128389
show more ...
|
|
Revision tags: llvmorg-14.0.5 |
|
| #
142db43b |
| 09-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Allow recovery from BACKSPACE(badUnit)
When an unconnected unit number is used in a BACKSPACE statement with ERR=, IOSTAT=, &/or IOMSG= control specifiers, don't crash, but let the
[flang][runtime] Allow recovery from BACKSPACE(badUnit)
When an unconnected unit number is used in a BACKSPACE statement with ERR=, IOSTAT=, &/or IOMSG= control specifiers, don't crash, but let the program deal with the error.
Differential Revision: https://reviews.llvm.org/D127782
show more ...
|
| #
6ce0fba0 |
| 08-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Skip remainder of bad input record even with ADVANCE='NO'
After a recoverable error condition in a READ statement with ADVANCE='NO', skip the remainder of the current record.
Diffe
[flang][runtime] Skip remainder of bad input record even with ADVANCE='NO'
After a recoverable error condition in a READ statement with ADVANCE='NO', skip the remainder of the current record.
Differential Revision: https://reviews.llvm.org/D127433
show more ...
|
| #
1444bc82 |
| 06-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Fix list-directed/NAMELIST complex input with "r*" repetition count
The little state machine in GetNextDataEdit() wasn't transitioning properly from reading the imaginary part of th
[flang][runtime] Fix list-directed/NAMELIST complex input with "r*" repetition count
The little state machine in GetNextDataEdit() wasn't transitioning properly from reading the imaginary part of the number back to the real part for the next iteration of a repeated value.
Differential Revision: https://reviews.llvm.org/D127422
show more ...
|
| #
166d6ed5 |
| 06-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Better (but still synchronous) support for asynchronous I/O
Track pending "asynchronous" I/O operation IDs so that WAIT statements can report errors about bad ID numbers.
Lowering
[flang][runtime] Better (but still synchronous) support for asynchronous I/O
Track pending "asynchronous" I/O operation IDs so that WAIT statements can report errors about bad ID numbers.
Lowering will need to extended to call GetAsynchronousId() for a READ or WRITE statement with ID=n.
Differential Revision: https://reviews.llvm.org/D127421
show more ...
|
| #
24969385 |
| 06-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Fix nonadvancing output edge case
When nonadvancing output uses T/TL control edit descriptors to reposition the record, don't reset the position to the furthest point written at the
[flang][runtime] Fix nonadvancing output edge case
When nonadvancing output uses T/TL control edit descriptors to reposition the record, don't reset the position to the furthest point written at the end of the write.
Differential Revision: https://reviews.llvm.org/D127420
show more ...
|
| #
11f928af |
| 02-Jun-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Fix deadlock in error recovery
When an external I/O statement is in a recoverable error state before any data transfers take place (for example, an unformatted transfer with ERR=/IO
[flang][runtime] Fix deadlock in error recovery
When an external I/O statement is in a recoverable error state before any data transfers take place (for example, an unformatted transfer with ERR=/IOSTAT=/IOMSG= attempted on a formatted unit), ensure that the unit's mutex is still released at the end of the statement.
Differential Revision: https://reviews.llvm.org/D127032
show more ...
|
| #
9878facf |
| 29-May-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] INQUIRE(FILE="...",SIZE=nbytes)
Implement inquire-by-file SIZE= specifier.
Differential Revision: https://reviews.llvm.org/D127014
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
d90e866a |
| 18-May-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] INQUIRE(UNIT=666,NUMBER=n) must set n=666
Whether a unit number in an inquire-by-unit statement is valid or not, it should be the value to which the NUMBER= variable is set, not -1.
[flang][runtime] INQUIRE(UNIT=666,NUMBER=n) must set n=666
Whether a unit number in an inquire-by-unit statement is valid or not, it should be the value to which the NUMBER= variable is set, not -1. -1 should be returned to NUMBER= only for an inquire-by-file statement when the FILE= is not connected to any unit.
Differential Revision: https://reviews.llvm.org/D126145
show more ...
|
|
Revision tags: llvmorg-14.0.3 |
|
| #
72831a59 |
| 28-Apr-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] BACKSPACE after non-advancing I/O
A BACKSPACE statement on a unit after a READ or WRITE with ADVANCE="NO" must reset the position to the beginning of the record, not to the beginnin
[flang][runtime] BACKSPACE after non-advancing I/O
A BACKSPACE statement on a unit after a READ or WRITE with ADVANCE="NO" must reset the position to the beginning of the record, not to the beginning of the previous one.
Differential Revision: https://reviews.llvm.org/D125057
show more ...
|
| #
36771bba |
| 26-Apr-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Correct emission & reading of unterminated final records
When the last operation on a foramtted sequential or stream file (prior to an implied or explicit ENDFILE) is a non-advancin
[flang][runtime] Correct emission & reading of unterminated final records
When the last operation on a foramtted sequential or stream file (prior to an implied or explicit ENDFILE) is a non-advancing WRITE, ensure that any partial record data is emitted to the file without a line terminator. Further, when that last record is read with a non-advancing READ, ensure that it won't raise an end-of-record condition after its data, but instead will signal an end-of-file.
Differential Revision: https://reviews.llvm.org/D124546
show more ...
|
|
Revision tags: llvmorg-14.0.2 |
|
| #
aac6e25f |
| 19-Apr-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Signal record read overrun when PAD='NO'
When PAD='NO' and ADVANCE='YES', we currently signal an input error when a formatted read tries to go past the end of a record only when a f
[flang][runtime] Signal record read overrun when PAD='NO'
When PAD='NO' and ADVANCE='YES', we currently signal an input error when a formatted read tries to go past the end of a record only when a fixed RECL= is in effect. Other compilers will signal an error without RECL= too, and that seems like a precedent we should follow.
Differential Revision: https://reviews.llvm.org/D124301
show more ...
|
|
Revision tags: llvmorg-14.0.1 |
|
| #
cd03e96f |
| 23-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Add & use a better visit() (take 2)
Adds flang/include/flang/Common/log2-visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit().
[flang] Add & use a better visit() (take 2)
Adds flang/include/flang/Common/log2-visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most use sites in the front-end and runtime to use common::visit().
The C++ standard mandates that std::visit() have O(1) execution time, which forces implementations to build dispatch tables. This new common::visit() is O(log2 N) in the number of alternatives in a variant<>, but that N tends to be small and so this change produces a fairly significant improvement in compiler build memory requirements, a 5-10% improvement in compiler build time, and a small improvement in compiler execution time.
Building with -DFLANG_USE_STD_VISIT causes common::visit() to be an alias for std::visit().
Calls to common::visit() with multiple variant arguments are referred to std::visit(), pending further work.
This change is enabled only for GCC builds with GCC >= 9; an earlier attempt (D122441) ran into bugs in some versions of clang and was reverted rather than simply disabled; and it is not well tested with MSVC. In non-GCC and older GCC builds, common::visit() is simply an alias for std::visit().
show more ...
|
| #
a68612a9 |
| 04-Apr-2022 |
Peter Klausler <[email protected]> |
[flang][runtime] Preserve effect of positioning in record in non-advancing output
When formatted non-advancing output ends in a control edit descriptor like nX or Tn or TRn that effectively extends
[flang][runtime] Preserve effect of positioning in record in non-advancing output
When formatted non-advancing output ends in a control edit descriptor like nX or Tn or TRn that effectively extends the record, fill any gap with explicit blanks at the completion of the WRITE.
Differential Revision: https://reviews.llvm.org/D123716
show more ...
|
| #
664c111c |
| 01-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Always encode multi-byte output in UTF-8
A recent change to implement UTF-8 encoding should have made the encoding conditional only for CHARACTER(KIND=1) to enable UTF-8 output vs. Latin-1 o
[flang] Always encode multi-byte output in UTF-8
A recent change to implement UTF-8 encoding should have made the encoding conditional only for CHARACTER(KIND=1) to enable UTF-8 output vs. Latin-1 or whatever. UTF-8 output of wider CHARACTER kinds should not be conditional (until we choose to support UCS-16, maybe). So wider CHARACTER kinds are being emitted with extra zero bytes; this patch fixes them.
Differential Revision: https://reviews.llvm.org/D123711
show more ...
|
| #
d2b339f1 |
| 31-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Respect left tab limit with Tn editing after ADVANCE='NO'
Correct the implementation of non-advancing I/O after some testing to ensure that T tab edit descriptors are not allowed to back up
[flang] Respect left tab limit with Tn editing after ADVANCE='NO'
Correct the implementation of non-advancing I/O after some testing to ensure that T tab edit descriptors are not allowed to back up into positions of a record prior to where it stood at the beginning of the I/O statement.
Differential Revision: https://reviews.llvm.org/D123709
show more ...
|
| #
4ca111d4 |
| 28-Mar-2022 |
Andrzej Warzynski <[email protected]> |
Revert "[flang] Add & use a better visit()"
This reverts commit 2ab9990c9eb79682a4d4b183dfbc7612d3e55328. It has caused multiple build failures: * https://lab.llvm.org/buildbot/#/builders/177/build
Revert "[flang] Add & use a better visit()"
This reverts commit 2ab9990c9eb79682a4d4b183dfbc7612d3e55328. It has caused multiple build failures: * https://lab.llvm.org/buildbot/#/builders/177/builds/4346 * https://lab.llvm.org/buildbot/#/builders/180/builds/3803 * https://lab.llvm.org/buildbot/#/builders/175/builds/10419 * https://lab.llvm.org/buildbot/#/builders/191/builds/4318 * https://lab.llvm.org/buildbot/#/builders/173/builds/4274 * https://lab.llvm.org/buildbot/#/builders/181/builds/4297
All these bots failed with a time-out: ``` command timed out: 1200 seconds without output running [b'ninja', b'-j', b'32'], attempting to kill ``` I'm guessing that that's due to template instantiations failing at some point (https://reviews.llvm.org/D122441 introduced a custom implementation of std::visit). Everything seems fine when either: * building on X86 with GCC or Clang (tested with GCC 9.3 and Clang 12) * building on AArch64 with GCC (tested with GCC 11)
show more ...
|
| #
435641bc |
| 24-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Catch bad OPEN(STATUS=) cases
STATUS='NEW' and 'REPLACE' require FILE= to be present. STATUS='SCRATCH' may not appear with FILE=.
These errors are caught at compilation time when constant c
[flang] Catch bad OPEN(STATUS=) cases
STATUS='NEW' and 'REPLACE' require FILE= to be present. STATUS='SCRATCH' may not appear with FILE=.
These errors are caught at compilation time when constant character strings are used in an OPEN statement, but the runtime needs to enforce them as well to catch errors in OPEN statements with character variables and expressions.
Differential Revision: https://reviews.llvm.org/D122509
show more ...
|
| #
2ab9990c |
| 23-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Add & use a better visit()
Adds flang/include/flang/Common/visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most
[flang] Add & use a better visit()
Adds flang/include/flang/Common/visit.h, which defines a Fortran::common::visit() template function that is a drop-in replacement for std::visit(). Modifies most use sites in the front-end and runtime to use common::visit().
The C++ standard mandates that std::visit() have O(1) execution time, which forces implementations to build dispatch tables. This new common::visit() is O(log2 N) in the number of alternatives in a variant<>, but that N tends to be small and so this change produces a fairly significant improvement in compiler build memory requirements, a 5-10% improvement in compiler build time, and a small improvement in compiler execution time.
Building with -DFLANG_USE_STD_VISIT causes common::visit() to be an alias for std::visit().
Calls to common::visit() with multiple variant arguments are referred to std::visit(), pending further work.
Differential Revision: https://reviews.llvm.org/D122441
show more ...
|
| #
bafbae23 |
| 16-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Initial UTF-8 support in runtime I/O
Implements UTF-8 encoding and decoding for external units with OPEN(ENCODING='UTF-8'). This encoding applies to default CHARACTER values that are not 7-
[flang] Initial UTF-8 support in runtime I/O
Implements UTF-8 encoding and decoding for external units with OPEN(ENCODING='UTF-8'). This encoding applies to default CHARACTER values that are not 7-bit ASCII as well as to the wide CHARACTER kinds 2 and 4. Basic testing is in place via direct calls to the runtime I/O APIs, but serious checkout awaits lowering support of the wide CHARACTER kinds.
Differential Revision: https://reviews.llvm.org/D122038
show more ...
|
| #
8db4dc86 |
| 14-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Error recovery improvement in runtime (IOMSG=)
Some refactoring and related fixes for more accurate user program error recovery in the I/O runtime, especially for error recovery with IOMSG=
[flang] Error recovery improvement in runtime (IOMSG=)
Some refactoring and related fixes for more accurate user program error recovery in the I/O runtime, especially for error recovery with IOMSG= character values.
1) Move any work in an EndIoStatement() implementation that may raise an error into a new CompleteOperation() member function. This allows error handling APIs like GetIoMsg() to complete a pending I/O statement and harvest any errors that may result.
2) Move the pending error code from ErroneousIoStatementState to a new pendingError_ data member in IoErrorHandler. This allows IoErrorHandler::InError() to return a correct result when there is a pending error that will be recovered from so that I/O list data transfers don't crash in the meantime.
3) Don't create and leak a unit for a failed OPEN(NEWUNIT=n) with error recovery, and don't modify 'n'. (Depends on changes to API call ordering in lowering, in a separate patch; code was added to ensure that OPEN statement control list specifiers, e.g. SetFile(), must be passed before GetNewUnit().)
4) Fix the code that calls a form of strerror to fill an IOMSG= variable so that it actually works for Fortran's character type: blank fill with no null or newline termination.
Differential Revision: https://reviews.llvm.org/D122036
show more ...
|
|
Revision tags: llvmorg-14.0.0 |
|
| #
e3550f19 |
| 11-Mar-2022 |
Peter Steinfeld <[email protected]> |
[flang] Improve runtime crash messages
Where possible, I added additional information to the messages to help programmers figure out what went wrong. I also removed all uses of the word "bad" from
[flang] Improve runtime crash messages
Where possible, I added additional information to the messages to help programmers figure out what went wrong. I also removed all uses of the word "bad" from the messages since (to me) that implies a moral judgement rather than a programming error. I replaced it with either "invalid" or "unsupported" where appropriate.
Differential Revision: https://reviews.llvm.org/D121493
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2 |
|
| #
ef7f6f7c |
| 23-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Use faster path for default formatted character input
Rather than reading default character variables in formatted input one byte at a time via NextInField(), skip and read them via blocks o
[flang] Use faster path for default formatted character input
Rather than reading default character variables in formatted input one byte at a time via NextInField(), skip and read them via blocks of available buffer data. This eliminates a bottleneck that affected reads of large character values. (It also exposed a problem with sequential reads with RECL= set on the OPEN statement, so that's fixed too.)
Differential Revision: https://reviews.llvm.org/D121144
show more ...
|