llvm-project/flang/runtime
Peter Klausler be68a6adfb [flang] Error detection/avoidance for TRANSFER with empty MOLD= type
When MOLD= is an array and there is no SIZE= in a call to TRANSFER(),
the size of an element of the MOLD= is used as the denominator in a
division to establish the extent of the vector result.  When the
total storage size of the SOURCE= is known to be zero, the result is
empty and no division is needed.

To avoid a division by zero at runtime, we need to check for a zero-sized
MOLD= element type when the storage size of SOURCE= is nonzero and there
is no SIZE=.  Further, in the compilation-time rewriting of calls to
SHAPE(TRANSFER(...)) and SIZE(TRANSFER(...)) for constant folding and
simplification purposes, we can't replace the call with an arithmetic
element count expression when the storage size of SOURCE= is not known
to be zero and the element size of MOLD= is not known to be nonzero at
compilation time.

These changes mostly affect tests using a MOLD= argument that is an
assumed-length character.

Differential Revision: https://reviews.llvm.org/D129680
2022-07-13 16:50:57 -07:00
..
FortranMain [flang][Runtime] Use proper prototypes in Fortran_main. NFCI 2022-05-18 08:04:09 +00:00
CMakeLists.txt [flang][driver] Add support for generating executables 2022-04-25 12:00:23 +00:00
ISO_Fortran_binding.cpp [flang] LBOUND() edge case: empty dimension 2022-03-14 11:16:09 -07:00
allocatable.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
assign.cpp [flang] Make subscript list argument a nullable pointer 2021-11-08 11:53:13 -08:00
buffer.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
buffer.h [flang][runtime] Keep frame buffer in sync with file when truncating 2022-07-13 16:12:12 -07:00
character.cpp [flang][runtime] Make NCOPIES= argument of REPEAT a signed integer, & check it 2022-06-15 14:29:17 -07:00
command.cpp Fix invalid overflow check in flang 2022-03-30 16:47:33 +02:00
complex-reduction.c [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
complex-reduction.h [flang] Change complex type define in runtime for clang-cl 2021-09-22 06:54:33 +00:00
config.h.cmake [flang] Support platforms without strerror_r 2020-03-28 16:46:43 -05:00
connection.cpp [flang] Honor RECL= in list-directed/namelist output 2022-03-02 12:07:18 -08:00
connection.h [flang][runtime] Don't pad CHARACTER input at end of record unless PAD='YES' 2022-05-09 12:39:43 -07:00
copy.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
copy.h [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
derived-api.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
derived.cpp [flang] Fix extent computation in finalization 2022-03-09 09:01:02 -08:00
derived.h [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
descriptor-io.cpp [flang] Fix repeated "DT" editing 2022-01-21 17:22:51 -08:00
descriptor-io.h [flang][runtime] Signal END from character input 2022-06-15 14:12:38 -07:00
descriptor.cpp [flang][runtime] Ensure PointerDeallocate actually deallocate pointers 2022-03-28 10:22:08 +02:00
dot-product.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
edit-input.cpp [flang][runtime] Complete list-directed character input with DECIMAL='COMMA' 2022-07-13 16:37:44 -07:00
edit-input.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
edit-output.cpp [flang][runtime] Refine list-directed REAL(2) output 2022-07-13 16:10:46 -07:00
edit-output.h [flang][runtime] Detect overflow of fixed-sized exponent output field 2022-06-13 16:10:32 -07:00
environment.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
environment.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
extensions.cpp [flang] Add CALL FLUSH(n) legacy extension 2021-12-08 08:56:54 -08:00
extrema.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
file.cpp [flang][runtime] Catch OPEN of connected file 2022-06-04 11:06:37 -07:00
file.h [flang][runtime] Catch OPEN of connected file 2022-06-04 11:06:37 -07:00
findloc.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
format-implementation.h [flang][runtime] Fix handling of output FORMAT('x' 'y') 2022-06-15 14:23:02 -07:00
format.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
format.h [flang][runtime] Trim FORMATs echoed to error messages 2022-07-06 18:55:03 -07:00
inquiry.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
internal-unit.cpp [flang][runtime] Don't crash after surviving internal output overflow 2022-06-04 08:47:13 -07:00
internal-unit.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
io-api.cpp [flang][runtime] FLUSH(bad or unconnected unit number) is an error 2022-06-23 11:08:53 -07:00
io-error.cpp [flang] Error recovery improvement in runtime (IOMSG=) 2022-03-18 17:24:32 -07:00
io-error.h [flang][runtime] Clean up asynchronous I/O APIs 2022-05-24 07:54:57 -07:00
io-stmt.cpp [flang][runtime] Complete list-directed character input with DECIMAL='COMMA' 2022-07-13 16:37:44 -07:00
io-stmt.h [flang][runtime] Allow recovery from BACKSPACE(badUnit) 2022-06-15 13:00:54 -07:00
iostat.cpp [flang][runtime] FLUSH(bad or unconnected unit number) is an error 2022-06-23 11:08:53 -07:00
lock.h [flang][runtime] Remove dependency on C++ <mutex> on Windows 2022-06-10 11:25:45 +00:00
main.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
matmul.cpp [flang] Speed common runtime cases of DOT_PRODUCT & MATMUL 2021-10-22 14:36:13 -07:00
memory.cpp [flang] Move runtime API headers to flang/include/flang/Runtime 2021-09-03 11:08:34 -07:00
misc-intrinsic.cpp [flang] Error detection/avoidance for TRANSFER with empty MOLD= type 2022-07-13 16:50:57 -07:00
namelist.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
namelist.h [flang] Support NAMELIST input of short arrays 2021-10-22 13:38:11 -07:00
numeric.cpp [flang] SET_EXPONENT(-0.0) should return -0.0 2022-07-07 12:43:30 -07:00
pointer.cpp [flang][runtime] Make ASSOCIATED() conform with standard 2022-06-16 11:39:44 -07:00
product.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
ragged.cpp [flang] Simplify RaggedArrayHeader and make it plain C struct 2021-12-09 22:28:06 +01:00
random.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
reduction-templates.h [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
reduction.cpp [flang] Improve runtime crash messages 2022-03-12 15:15:56 -08:00
stat.cpp [flang] Implement GET_ENVIRONMENT_VARIABLE(VALUE) 2021-11-01 09:19:20 +00:00
stat.h [flang] Implement GET_ENVIRONMENT_VARIABLE(VALUE) 2021-11-01 09:19:20 +00:00
stop.cpp [flang] Rename the runtime routine that reports a fatal user error 2022-02-01 09:01:50 -08:00
sum.cpp [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
support.cpp [flang] Define & implement a lowering support API IsContiguous() in runtime 2021-11-30 14:15:56 -08:00
terminator.cpp [flang] Remove *- C++ -* incantation from runtime .cpp files. NFC 2021-09-03 07:17:45 +00:00
terminator.h [flang] Define & implement a lowering support API IsContiguous() in runtime 2021-11-30 14:15:56 -08:00
time-intrinsic.cpp [flang][MSVC] Fix building with `/permissive-` flag 2022-05-24 23:36:04 -05:00
tools.cpp [flang] Change "bad kind" messages in the runtime to "not yet implemented" 2022-05-10 20:08:03 -07:00
tools.h [flang][runtime] Use __float128 where possible & needed in runtime 2022-06-05 09:16:57 -07:00
transformational.cpp [flang][runtime] Fix runtime CSHIFT of rank>1 array case of negative shift count 2022-06-13 11:34:25 -07:00
type-code.cpp [flang][runtime] Fix KIND=16 real/complex component I/O 2022-04-25 11:18:21 -07:00
type-info.cpp [flang] Fix character length calculation for Unicode component 2022-05-23 17:48:12 -07:00
type-info.h [flang] Allow for deferred-length character in EstablishDescriptor 2022-02-14 10:05:07 -08:00
unit-map.cpp [flang][runtime] Catch OPEN of connected file 2022-06-04 11:06:37 -07:00
unit-map.h [flang][runtime] Catch more (all?) negative unit number errors 2022-06-15 17:29:50 -07:00
unit.cpp [flang][runtime] Keep frame buffer in sync with file when truncating 2022-07-13 16:12:12 -07:00
unit.h [flang] Fix READ/WRITE with POS= on stream units, with refactoring 2022-06-23 09:16:49 -07:00
utf.cpp [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00
utf.h [flang] Initial UTF-8 support in runtime I/O 2022-03-22 11:48:14 -07:00