|
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 |
|
| #
6052025b |
| 30-Jun-2022 |
Peter Klausler <[email protected]> |
[flang] Add IsElementalProcedure() predicate
Replace most tests of the explicit Attr::ELEMENTAL symbol flag with a new predicate IsElementalProcedure() that works correctly for alternate ENTRY point
[flang] Add IsElementalProcedure() predicate
Replace most tests of the explicit Attr::ELEMENTAL symbol flag with a new predicate IsElementalProcedure() that works correctly for alternate ENTRY points and does the right thing for procedure interfaces that reference elemental intrinsic functions like SIN() whose elemental nature does not propagate.
Differential Revision: https://reviews.llvm.org/D129022
show more ...
|
| #
779d2470 |
| 29-Jun-2022 |
Peixin-Qiao <[email protected]> |
[flang] Support check for BIND statement entity
As Fortran 2018 8.6.4(1), the BIND statement specifies the BIND attribute for a list of variables and common blocks.
Reviewed By: klausler
Different
[flang] Support check for BIND statement entity
As Fortran 2018 8.6.4(1), the BIND statement specifies the BIND attribute for a list of variables and common blocks.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D127120
show more ...
|
|
Revision tags: llvmorg-14.0.6 |
|
| #
cfd474e0 |
| 15-Jun-2022 |
Peter Klausler <[email protected]> |
[flang] Enforce C1552, no binding labels allowed for internal procedures
If BIND(C) appears on an internal procedure, it must have a null binding label, i.e. BIND(C,NAME="").
Also address conflicts
[flang] Enforce C1552, no binding labels allowed for internal procedures
If BIND(C) appears on an internal procedure, it must have a null binding label, i.e. BIND(C,NAME="").
Also address conflicts with D127725 which was merged during development.
Differential Revision: https://reviews.llvm.org/D128676
show more ...
|
| #
3fa62efd |
| 22-Jun-2022 |
Peixin Qiao <[email protected]> |
[flang] Add semantic check for C1520
As Fortran 2018 C1520, if proc-language-binding-spec with NAME= is specified, then proc-decl-list shall contain exactly one proc-decl, which shall neither have t
[flang] Add semantic check for C1520
As Fortran 2018 C1520, if proc-language-binding-spec with NAME= is specified, then proc-decl-list shall contain exactly one proc-decl, which shall neither have the POINTER attribute nor be a dummy procedure. Add this check.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D127725
show more ...
|
| #
60e35994 |
| 15-Jun-2022 |
PeixinQiao <[email protected]> |
[flang] Fix one regression failure related to BIND(C) statement
For BIND(C) statement, two common block with the same name can have the same bind name. Fix the regression failure by adding this chec
[flang] Fix one regression failure related to BIND(C) statement
For BIND(C) statement, two common block with the same name can have the same bind name. Fix the regression failure by adding this check. Also add the regression tests.
Co-authored-by: Jean Perier <[email protected]>
Reviewed By: clementval
Differential Revision: https://reviews.llvm.org/D127841
show more ...
|
| #
dafd3cf8 |
| 14-Jun-2022 |
Peixin-Qiao <[email protected]> |
[flang] Complement one-to-one association check of bind name and entity name
As Fortran 2018 C802 and C873, if bind name is specified, there can only be only one entity. The check for common block i
[flang] Complement one-to-one association check of bind name and entity name
As Fortran 2018 C802 and C873, if bind name is specified, there can only be only one entity. The check for common block is missed before. As Fortran 2018 8.5.5 point 2, the bind name is one identifier, which is unique. That is, one entity can not have multiple bind names. Also add this check.
Reviewed By: klausler, Jean Perier
Differential Revision: https://reviews.llvm.org/D126961
show more ...
|
|
Revision tags: llvmorg-14.0.5 |
|
| #
b6713fee |
| 08-Jun-2022 |
PeixinQiao <[email protected]> |
[flang] Add one semantic check for procedure bind(C) interface-name
As Fortran 2018 C1521, in procedure declaration statement, if proc-language-binding-spec (bind(c)) is specified, the proc-interfac
[flang] Add one semantic check for procedure bind(C) interface-name
As Fortran 2018 C1521, in procedure declaration statement, if proc-language-binding-spec (bind(c)) is specified, the proc-interface shall appear, it shall be an interface-name, and interface-name shall be declared with a proc-language-binding-spec.
Reviewed By: klausler, Jean Perier
Differential Revision: https://reviews.llvm.org/D127121
show more ...
|
| #
e2ac99b7 |
| 02-Jun-2022 |
PeixinQiao <[email protected]> |
[flang] Add check for conflict of BIND(C) and Parameter attributes
The entity with BIND(C) attribute cannot be a named constant, so the BIND(C) and parameter attributes are conflicted. Add check for
[flang] Add check for conflict of BIND(C) and Parameter attributes
The entity with BIND(C) attribute cannot be a named constant, so the BIND(C) and parameter attributes are conflicted. Add check for it.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D126654
show more ...
|
| #
5491fdf5 |
| 01-Jun-2022 |
Peixin-Qiao <[email protected]> |
[flang] Add semantic check for named constant as function result
Similar to procedure argument, the function result cannot be one named constant.
Reviewed By: klausler
Differential Revision: https
[flang] Add semantic check for named constant as function result
Similar to procedure argument, the function result cannot be one named constant.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D126693
show more ...
|
| #
f3d83353 |
| 31-May-2022 |
PeixinQiao <[email protected]> |
[flang] Support BIND(C) variable scope check
As Fortran 2018 C819, a variable with the BIND attribute shall be declared in the specification part of a module. Add the support for this check.
Review
[flang] Support BIND(C) variable scope check
As Fortran 2018 C819, a variable with the BIND attribute shall be declared in the specification part of a module. Add the support for this check.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D126653
show more ...
|
|
Revision tags: llvmorg-14.0.4 |
|
| #
dcf9ba82 |
| 20-May-2022 |
Peter Klausler <[email protected]> |
[flang] Fix false error for multiple defined I/O subroutines
User-defined derived type I/O subroutines need to be unique for a given type and operation in any scope, but it is acceptable to have mor
[flang] Fix false error for multiple defined I/O subroutines
User-defined derived type I/O subroutines need to be unique for a given type and operation in any scope, but it is acceptable to have more than one defined I/O subroutine so long as only one of them is visible.
Differential Revision: https://reviews.llvm.org/D126152
show more ...
|
| #
7f680b26 |
| 17-May-2022 |
Peter Klausler <[email protected]> |
[flang] Allow more forward references to ENTRY names
Forward references to ENTRY names to pass them as actual procedure arguments don't work in all cases, exposing some basic ordering problems in na
[flang] Allow more forward references to ENTRY names
Forward references to ENTRY names to pass them as actual procedure arguments don't work in all cases, exposing some basic ordering problems in name resolution for these symbols. Refactor; create all the necessary procedure symbols, and either function result or host association symbols (for subroutines), at the time that the subprogrma scope is created, so that the names exist in the scope as text "before" the ENTRY is processed in name resolution. Some processing remains in PostEntryStmt() so that we can check that an ENTRY with an explicit distinct RESULT doesn't also have declarations for the ENTRY name.
Differential Revision: https://reviews.llvm.org/D126142
show more ...
|
| #
03773228 |
| 11-May-2022 |
Peter Klausler <[email protected]> |
[flang] Ignore BIND(C) binding name conflicts of inner procedures
The binding names of inner procedures with BIND(C) are not exposed to the loader and should be ignored for potential conflict errors
[flang] Ignore BIND(C) binding name conflicts of inner procedures
The binding names of inner procedures with BIND(C) are not exposed to the loader and should be ignored for potential conflict errors.
Differential Revision: https://reviews.llvm.org/D126141
show more ...
|
| #
a2ac0bb2 |
| 13-May-2022 |
PeixinQiao <[email protected]> |
[flang] Warn for the limit on name length
As fortran 2018 C601, the maximum length of a name is 63 characters.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D125371
|
| #
940871dd |
| 29-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Enforce limit on rank + corank
Fortran 2018 requires that a compiler allow objects whose rank + corank is 15, and that's our maximum; detect and diagnose violations.
Differential Revision:
[flang] Enforce limit on rank + corank
Fortran 2018 requires that a compiler allow objects whose rank + corank is 15, and that's our maximum; detect and diagnose violations.
Differential Revision: https://reviews.llvm.org/D125153
show more ...
|
| #
c207e360 |
| 09-May-2022 |
Peixin-Qiao <[email protected]> |
[flang] Enforce a program not including more than one main program
As Fortran 2018 5.2.2 states, a program shall consist of exactly one main program. Add this semantic check.
Reviewed By: klausler
[flang] Enforce a program not including more than one main program
As Fortran 2018 5.2.2 states, a program shall consist of exactly one main program. Add this semantic check.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D125186
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2 |
|
| #
488b9fd1 |
| 15-Apr-2022 |
Daniil Dudkin <[email protected]> |
[flang] Do not ICE on recursive function definition in function result
The following code causes the compiler to ICE in several places due to lack of support of recursive procedure definitions throu
[flang] Do not ICE on recursive function definition in function result
The following code causes the compiler to ICE in several places due to lack of support of recursive procedure definitions through the function result.
function foo() result(r) procedure(foo), pointer :: r end function foo
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 ...
|
| #
eb14135e |
| 04-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Correct interaction between generics and intrinsics
Fortran allows a generic interface to have he same name as an intrinsic procedure. If the intrinsic is explicitly marked with the INTRINS
[flang] Correct interaction between generics and intrinsics
Fortran allows a generic interface to have he same name as an intrinsic procedure. If the intrinsic is explicitly marked with the INTRINSIC attribute, restrictions apply (C848) - the generic must contain only functions or subroutines, depending on the intrinsic. Explicit or not, the generic overrides the intrinsic, but the intrinsic behavior must still be available for calls whose actual arguments do not match any of the specific procedures.
Semantics was not checking constraint C848, and it didn't allow an explicit INTRINSIC attribute on a name of a generic interface.
Differential Revision: https://reviews.llvm.org/D123713
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, 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 |
|
| #
39686557 |
| 18-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Accommodate module subprograms defined in the same module
The symbol table, name resolution, and semantic checks for module subprograms -- esp. for MODULE FUNCTION and MODULE SUBROUTINE, but
[flang] Accommodate module subprograms defined in the same module
The symbol table, name resolution, and semantic checks for module subprograms -- esp. for MODULE FUNCTION and MODULE SUBROUTINE, but also MODULE PROCEDURE -- essentially assumed that the subprogram would be defined in a submodule of the (sub)module containing its interface. However, it is conforming to instead declare a module subprogram in the *same* (sub)module as its interface, and we need to handle that case.
Since this case involves two symbols in the same scope with the same name, the symbol table details for subprograms have been extended with a pointer to the original module interface, rather than relying on searching in scopes.
Differential Revision: https://reviews.llvm.org/D120839
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1 |
|
| #
7fbabe6e |
| 08-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Avoid bogus error for specification expression
When a scope's symbol has characteriztics whose specification expressions depend on other non-constant symbols in the same scope, f18 rightfull
[flang] Avoid bogus error for specification expression
When a scope's symbol has characteriztics whose specification expressions depend on other non-constant symbols in the same scope, f18 rightfully emits an error. However, in the case of usage in specification expressions involving host association, the program is not invalid. This can arise, for example, in the case of an internal function whose result's attributes use host-associated variables.
Differential Revision: https://reviews.llvm.org/D119565
show more ...
|
|
Revision tags: llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
2985d562 |
| 11-Jan-2022 |
Peter Klausler <[email protected]> |
[flang] Improve error message (initialized variable in pure subprogram)
When variable with the SAVE attribute appears in a pure subprogram, emit a more specialized error message if the SAVE attribut
[flang] Improve error message (initialized variable in pure subprogram)
When variable with the SAVE attribute appears in a pure subprogram, emit a more specialized error message if the SAVE attribute was acquired from static initialization.
Differential Revision: https://reviews.llvm.org/D117699
show more ...
|