|
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 |
|
| #
95f4ca7f |
| 22-Jul-2022 |
Peter Klausler <[email protected]> |
[flang] Allow restricted specific intrinsic functions as implicitly-interfaced procedure pointer targets
The predicate "CanBeCalledViaImplicitInterface()" was returning false for restricted specific
[flang] Allow restricted specific intrinsic functions as implicitly-interfaced procedure pointer targets
The predicate "CanBeCalledViaImplicitInterface()" was returning false for restricted specific intrinsic functions (e.g., SIN) because their procedure characteristics have the elemental attribute; this leads to a bogus semantic error when one attempts to use them as proc-targets in procedure pointer assignment statements when the left-hand side of the assignment is a procedure pointer with an implicit interface. However, these restricted specific intrinsic functions have always been allowed as special cases for such usage -- it is as if they are elemental when it is necessary for them to be so, but not when it's a problem.
Differential Revision: https://reviews.llvm.org/D130386
show more ...
|
| #
85a40ce6 |
| 18-Jul-2022 |
Peter Klausler <[email protected]> |
[flang] Better error message for NULL() actual argument for dummy allocatable
f18 intentionally does not support the spottily-implemented language extension in which one can pass NULL() for an alloc
[flang] Better error message for NULL() actual argument for dummy allocatable
f18 intentionally does not support the spottily-implemented language extension in which one can pass NULL() for an allocatable dummy argument. This is perhaps a sanctioned side effect in other compilers of the fact that they pass distinct "base address" and "descriptor address" physical arguments.
Make the error message in this case more specific to the circumstances, and add a note to Extensions.md to clarify that this behavior is intended.
(We could, with some effort in lowering, support passing NULL for an INTENT(IN) allocatable dummy, but let's see whether such nonconforming usage appears in a real application before spending any more time on it.)
Differential Revision: https://reviews.llvm.org/D130380
show more ...
|
| #
62d874f2 |
| 08-Jul-2022 |
Peter Klausler <[email protected]> |
[flang] Refine semantic checks for procedure pointer assignment
Some procedure pointers and EXTERNAL procedures have neither explicit interfaces nor result types; these procedures are obviously not
[flang] Refine semantic checks for procedure pointer assignment
Some procedure pointers and EXTERNAL procedures have neither explicit interfaces nor result types; these procedures are obviously not known to be functions, but they could be, so semantics must not assume that they are necessarily subroutines. Refine the procedure pointer / dummy procedure compatibility check to handle these more ambiguous cases and not elicit inappropriate error messages.
Differential Revision: https://reviews.llvm.org/D129674
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5 |
|
| #
3142c761 |
| 26-May-2022 |
Peter Klausler <[email protected]> |
[nfc][flang] Fix spelling errors and usage in an error message
Differential Revision: https://reviews.llvm.org/D126490
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
574f9dfe |
| 19-May-2022 |
Peter Klausler <[email protected]> |
[flang] Extension: Accept Hollerith actual arguments as if they were BOZ
When a Hollerith (or short character) literal is presented as an actual argument that corresponds to a dummy argument for whi
[flang] Extension: Accept Hollerith actual arguments as if they were BOZ
When a Hollerith (or short character) literal is presented as an actual argument that corresponds to a dummy argument for which a BOZ literal would be acceptable, treat the Hollerith as if it had been a BOZ literal in the same way -- and with the same code -- as f18 already does for the similar extension in DATA statements.
Differential Revision: https://reviews.llvm.org/D126144
show more ...
|
| #
5646d828 |
| 17-May-2022 |
Peixin-Qiao <[email protected]> |
[flang] Add one semantic check for elemental call arguments
As Fortran 2018 15.8.1(3), in a reference to an elemental procedure, if any argument is an array, each actual argument that corresponds to
[flang] Add one semantic check for elemental call arguments
As Fortran 2018 15.8.1(3), in a reference to an elemental procedure, if any argument is an array, each actual argument that corresponds to an INTENT (OUT) or INTENT (INOUT) dummy argument shall be an array. Add this semantic check.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D125685
show more ...
|
| #
78a166b4 |
| 03-May-2022 |
Peter Klausler <[email protected]> |
[flang] Allow NULL() actual argument for optional dummy procedure
A disassociated procedure pointer is allowed to be passed as an absent actual argument that corresponds to an optional dummy procedu
[flang] Allow NULL() actual argument for optional dummy procedure
A disassociated procedure pointer is allowed to be passed as an absent actual argument that corresponds to an optional dummy procedure, but not NULL(); accept that case as well.
Differential Revision: https://reviews.llvm.org/D125127
show more ...
|
| #
be768164 |
| 30-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Refine handling of short character actual arguments
Actual arguments whose lengths are less than the expected length of their corresponding dummy argument are errors; but this needs to be re
[flang] Refine handling of short character actual arguments
Actual arguments whose lengths are less than the expected length of their corresponding dummy argument are errors; but this needs to be refined. Short actual arguments that are variables remain errors, but those that are expressions can be (again) extended on the right with blanks.
Differential Revision: https://reviews.llvm.org/D125115
show more ...
|
| #
8867e83d |
| 04-May-2022 |
Daniil Dudkin <[email protected]> |
[flang] Fix ICE for passing a label for non alternate return arguments
When we pass an alternate return specifier to a regular (not an asterisk) dummy argument, flang would throw an internal compile
[flang] Fix ICE for passing a label for non alternate return arguments
When we pass an alternate return specifier to a regular (not an asterisk) dummy argument, flang would throw an internal compiler error of derefencing a null pointer. To avoid the ICE, a check was added.
Reviewed By: kiranchandramohan
Differential Revision: https://reviews.llvm.org/D123947
show more ...
|
| #
303ecc42 |
| 01-May-2022 |
PeixinQiao <[email protected]> |
[flang] Add one semantic check for implicit interface
As Fortran 2018 C1533, a nonintrinsic elemental procedure shall not be used as an actual argument. The semantic check for implicit iterface is m
[flang] Add one semantic check for implicit interface
As Fortran 2018 C1533, a nonintrinsic elemental procedure shall not be used as an actual argument. The semantic check for implicit iterface is missed.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D124379
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2, 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 ...
|
| #
847c3983 |
| 12-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Upgrade short actual character arguments to errors
f18 was emitting a warning about short character actual arguments to subprograms and statement functions; every other compiler considers th
[flang] Upgrade short actual character arguments to errors
f18 was emitting a warning about short character actual arguments to subprograms and statement functions; every other compiler considers this case to be an error.
Differential Revision: https://reviews.llvm.org/D123731
show more ...
|
| #
ef141aec |
| 01-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Improve appearance of message attachments
Error messages can have a list of attachments; these are used to point to related source locations, supply additional information, and to encapsulat
[flang] Improve appearance of message attachments
Error messages can have a list of attachments; these are used to point to related source locations, supply additional information, and to encapsulate error messages that were *not* emitted in a given context to explain why a warning was justified.
This patch adds a message severity ("Because") for that last case, and extends to AttachTo() API to provide a means for overriding the severity of an attached message.
Some existing message attachments had their severities adjusted, now that we're printing them. And operator==() for Message was cleaned up while debugging after I noticed that it was recursively O(N**2) and subject to returning a false positive.
Differential Revision: https://reviews.llvm.org/D123710
show more ...
|
| #
fbdcb3ce |
| 04-Apr-2022 |
PeixinQiao <[email protected]> |
[flang] Add one semantic check for allocatable/pointer argument association
The actual argument shall have deferred the same type parameters as the dummy argument if the argument is allocatable or p
[flang] Add one semantic check for allocatable/pointer argument association
The actual argument shall have deferred the same type parameters as the dummy argument if the argument is allocatable or pointer variable. Currently programs not following this get one crash during execution.
Reviewed By: Jean Perier
Differential Revision: https://reviews.llvm.org/D122779
show more ...
|
| #
7c158e3e |
| 01-Apr-2022 |
Jean Perier <[email protected]> |
[flang] add evaluate::IsAllocatableDesignator helper
Previously, some semantic checks that are checking if an entity is an allocatable were relying on the expression being a designator whose last sy
[flang] add evaluate::IsAllocatableDesignator helper
Previously, some semantic checks that are checking if an entity is an allocatable were relying on the expression being a designator whose last symbol has the allocatable attribute.
This is wrong since this was considering substrings and array sections of allocatables as being allocatable. This is wrong (see NOTE 2 in Fortran 2018 section 9.5.3.1).
Add evaluate::IsAllocatableDesignator to correctly test this. Also add some semantic tests for ALLOCATED to test the newly added helper. Note that ifort and nag are rejecting coindexed-named-object in ALLOCATED (`allocated(coarray_scalar_alloc[2])`). I think it is wrong given allocated argument is intent(in) as per 16.2.1 point 3. So 15.5.2.6 point 4 regarding allocatable dummy is not violated (If the actual argument is a coindexed object, the dummy argument shall have the INTENT (IN) attribute.) and I think this is valid. gfortran accepts it.
The need for this helper was exposed in https://reviews.llvm.org/D122779.
Differential Revision: https://reviews.llvm.org/D122899
Co-authored-by: Peixin-Qiao <[email protected]>
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 ...
|
| #
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 ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4 |
|
| #
a7802a80 |
| 11-Mar-2022 |
Jean Perier <[email protected]> |
[flang] Do not return true for pointer sub-object in IsPointerObject
evaluate::IsPointerObject used to return true for pointer suboject like `pointer(10)` while these object are not pointers. This p
[flang] Do not return true for pointer sub-object in IsPointerObject
evaluate::IsPointerObject used to return true for pointer suboject like `pointer(10)` while these object are not pointers. This prevented some checks like 15.5.2.7 to be correctly enforced (e.g., it was possible to pass `pointer(10)` to a non intent(in) dummy pointer).
After updating IsPointerObject behavior and adding a test for 15.5.2.7 in call07.f90, a test in call03.f90 for 15.5.2.4(14) was failing. It appeared the related semantics check was relying on IsPointerObject to return true for `pointer(10)`. Adapt the code to detect pointer element in another way. While looking at the code, I also noticed that semantics was rejecting `character(1)` pointer/assumed shape suboject when these are allowed (the standard has a special case for character(1) in 15.5.2.4(14), and I verified that other compilers that enforce 15.5.2.4(14) do accept this).
Differential Revision: https://reviews.llvm.org/D121377
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc3 |
|
| #
a53967cd |
| 07-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Distinguish usage and portability warning messages
Using recently established message severity codes, upgrade non-fatal messages to usage and portability warnings as appropriate.
Differenti
[flang] Distinguish usage and portability warning messages
Using recently established message severity codes, upgrade non-fatal messages to usage and portability warnings as appropriate.
Differential Revision: https://reviews.llvm.org/D121246
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc2 |
|
| #
3bfe9074 |
| 24-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Remove bogus messages for actual/dummy procedure argument compatibility
Add new IsCompatibleWith() member functions to many classes in evaluate::characteristics that apply more nuanced compa
[flang] Remove bogus messages for actual/dummy procedure argument compatibility
Add new IsCompatibleWith() member functions to many classes in evaluate::characteristics that apply more nuanced compatibility checking for function results, dummy arguments, and procedure interfaces than the previous tests for complete equivalence. Use IsCompatibleWith() in semantics for call checking.
Differential Revision: https://reviews.llvm.org/D120844
show more ...
|
| #
59d38f1b |
| 18-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Check constraint C711 correctly
An assumed-type actual argument that corresponds to an assumed-rank dummy argument shall be assumed-shape or assumed-rank.
Differential Revision: https://rev
[flang] Check constraint C711 correctly
An assumed-type actual argument that corresponds to an assumed-rank dummy argument shall be assumed-shape or assumed-rank.
Differential Revision: https://reviews.llvm.org/D120750
show more ...
|
| #
fa0443f2 |
| 12-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Make source location more accurate for actual arguments
Track source location information when available for actual arguments to procedure references, and use this information when checking
[flang] Make source location more accurate for actual arguments
Track source location information when available for actual arguments to procedure references, and use this information when checking constraints on calls so that error messages refer to specific actual arguments rather than to the entire call.
Differential Revision: https://reviews.llvm.org/D119849
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
02847775 |
| 11-Jan-2022 |
Peter Klausler <[email protected]> |
[flang] Accept BOZ literals for some actual arguments
Consistent with previously documented policy, in which BOZ literals are accepted in non-standard-conforming circumstances where they can be conv
[flang] Accept BOZ literals for some actual arguments
Consistent with previously documented policy, in which BOZ literals are accepted in non-standard-conforming circumstances where they can be converted to an unambiguous known numeric type, allow BOZ literals to be passed as an actual argument in a reference to a procedure whose explicit interface has a corresponding dummy argument with a numeric type to which the BOZ literal may be converted. Improve error messages associated with BOZ literal actual arguments, too: don't emit multiple errors.
Differential Revision: https://reviews.llvm.org/D117698
show more ...
|
| #
44bc97c8 |
| 26-Nov-2021 |
Peter Klausler <[email protected]> |
[flang] Adjust names in Semantics that imply too much (NFC)
Some kinds of Fortran arrays are declared with the same syntax, and it is impossible to tell from a shape (:, :) or (*) whether the object
[flang] Adjust names in Semantics that imply too much (NFC)
Some kinds of Fortran arrays are declared with the same syntax, and it is impossible to tell from a shape (:, :) or (*) whether the object is assumed shape, deferred shape, assumed size, implied shape, or whatever without recourse to more information about the symbol in question. This patch softens the names of some predicate functions (IsAssumedShape to CanBeAssumedShape) and makes others more reflective of the syntax they represent (isAssumed to isStar) in an attempt to encourage coders to seek and find definitive predicate functions whose names deliver what they seem to mean.
Address TODO comments in IsSimplyContiguous() by using the updated IsAssumedShape() predicate.
Differential Revision: https://reviews.llvm.org/D114829
show more ...
|
|
Revision tags: llvmorg-13.0.1-rc1 |
|
| #
14b90d1f |
| 19-Oct-2021 |
peter klausler <[email protected]> |
[flang] Fix generic resolution case
Don't try to convert INTEGER argument expressions to the kind of the dummy argument when performing generic resolution; specific procedures may be distinguished o
[flang] Fix generic resolution case
Don't try to convert INTEGER argument expressions to the kind of the dummy argument when performing generic resolution; specific procedures may be distinguished only by their kinds.
Differential Revision: https://reviews.llvm.org/D112240
show more ...
|