|
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 ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4, 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 ...
|
| #
9e7eef99 |
| 13-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Handle parameter-dependent types in PDT initializers
For parameterized derived type component initializers whose expressions' types depend on parameter values, f18's current scheme of analyz
[flang] Handle parameter-dependent types in PDT initializers
For parameterized derived type component initializers whose expressions' types depend on parameter values, f18's current scheme of analyzing the initialization expression once during name resolution fails. For example,
type :: pdt(k) integer, kind :: k real :: component = real(0.0, kind=k) end type
To handle such cases, it is necessary to re-analyze the parse trees of these initialization expressions once for each distinct initialization of the type.
This patch adds code to wipe an expression parse tree of its typed expressions, and update those of its symbol table pointers that reference type parameters, and then re-analyze that parse tree to generate the properly typed component initializers.
Differential Revision: https://reviews.llvm.org/D123728
show more ...
|
| #
9b200074 |
| 30-Mar-2022 |
Peter Klausler <[email protected]> |
[flang] Fix combining cases of USE association & generic interfaces
Fortran admits a few ways to have multiple symbols with the same name in the same scope. Two of them involve generic interfaces (
[flang] Fix combining cases of USE association & generic interfaces
Fortran admits a few ways to have multiple symbols with the same name in the same scope. Two of them involve generic interfaces (from INTERFACE or GENERIC, the syntax doesn't matter); these are allowed to inhabit a scope with either a derived type or a subprogram that is also a specific procedure of the generic. (But not both a derived type and a subprogram; they could not cohabit a scope anyway, generic or not.)
In cases of USE association, f18 needs to be capable of combining use-associated generic interfaces with other use-associated entities. Two generics get merged (this case was nearly correct); a generic and a derived type can merge into a GenericDetails with a shadowed derivedType(); and a generic can replace or ignore a use-associated procedure of the same name so long as that procedure is already one of its specifics.
Further, these modifications to the use-associated generic interface must be made to a local copy of the symbol. The previous code was messing directly with the symbol in the module's scope.
The fix is basically a reimplementation of the member function DoAddUse() in name resolution.
Differential Revision: https://reviews.llvm.org/D123704
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, 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 ...
|
| #
19d86426 |
| 11-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Catch I/O of bad derived type at compile time
Derived types with allocatable and pointer components cannot be used in I/O data transfer statements unless they have defined I/O procedures ava
[flang] Catch I/O of bad derived type at compile time
Derived types with allocatable and pointer components cannot be used in I/O data transfer statements unless they have defined I/O procedures available (as type-bound or regular generics). These cases are caught as errors by the I/O runtime library, but it would be better if they were flagged during compilation.
(Address comment in review: don't use explicit name string lengths.)
Differential Revision: https://reviews.llvm.org/D120675
show more ...
|
|
Revision tags: llvmorg-14.0.0-rc1, llvmorg-15-init |
|
| #
52a1346b |
| 26-Jan-2022 |
Peter Klausler <[email protected]> |
[flang] Distinguish intrinsic from non-intrinsic modules
For "USE, INTRINSIC", search only for intrinsic modules; for "USE, NON_INTRINSIC", do not recognize intrinsic modules. Allow modules of both
[flang] Distinguish intrinsic from non-intrinsic modules
For "USE, INTRINSIC", search only for intrinsic modules; for "USE, NON_INTRINSIC", do not recognize intrinsic modules. Allow modules of both kinds with the same name to be used in the same source file (but not in the same scoping unit, a constraint of the standard that is now enforced).
The symbol table's scope tree now has a single instance of a scope with a new kind, IntrinsicModules, whose children are the USE'd intrinsic modules (explicit or not). This separate "top-level" scope is a child of the single global scope and it allows both intrinsic and non-intrinsic modules of the same name to exist in the symbol table. Intrinsic modules' scopes' symbols now have the INTRINSIC attribute set.
The search path directories need to make a distinction between regular directories and the one(s) that point(s) to intrinsic modules. I allow for multiple intrinsic module directories in the second search path, although only one is needed today.
Differential Revision: https://reviews.llvm.org/D118631
show more ...
|
|
Revision tags: llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2, llvmorg-13.0.1-rc1 |
|
| #
fdcbb540 |
| 30-Sep-2021 |
Jean Perier <[email protected]> |
[flang][NFC] Add debug dump method to evaluate::Expr and semantics::Symbol
Helps debugging when working with symbol/expression issue. The dump method is easy to call in the debugger.
Co-authored-by
[flang][NFC] Add debug dump method to evaluate::Expr and semantics::Symbol
Helps debugging when working with symbol/expression issue. The dump method is easy to call in the debugger.
Co-authored-by: Eric Schweitz <[email protected]>
Differential Revision: https://reviews.llvm.org/D110856
show more ...
|
|
Revision tags: llvmorg-13.0.0, llvmorg-13.0.0-rc4, llvmorg-13.0.0-rc3, llvmorg-13.0.0-rc2 |
|
| #
d60a0220 |
| 10-Aug-2021 |
peter klausler <[email protected]> |
[flang] Include default component initialization in static initializers
The combined initializers constructed from DATA statements and explicit static initialization in declarations needs to include
[flang] Include default component initialization in static initializers
The combined initializers constructed from DATA statements and explicit static initialization in declarations needs to include derived type component default initializations, overriding those default values without complaint with values from explicit DATA statement or declaration initializations when they overlap. This also has to work for objects with storage association due to EQUIVALENCE. When storage association causes default component initializations to overlap, emit errors if and only if the values differ (See Fortran 2018 subclause 19.5.3, esp. paragraph 10).
The f18 front-end has a module that analyzes and converts DATA statements into equivalent static initializers for objects. For storage-associated objects, compiler-generated objects are created that overlay the entire association and fill it with a combined initializer. This "data-to-inits" module already exists, and this patch is essentially extension and clean-up of its machinery to complete the job.
Also: emit EQUIVALENCE to module files; mark compiler-created symbols and *don't* emit those to module files; check non-static EQUIVALENCE sets for conflicting default component initializations, so lowering doesn't have to check them or emit diagnostics.
Differential Revision: https://reviews.llvm.org/D109022
show more ...
|
|
Revision tags: llvmorg-13.0.0-rc1, llvmorg-14-init |
|
| #
c4a65434 |
| 22-Jul-2021 |
peter klausler <[email protected]> |
[flang] Symbol representation for dummy SubprogramDetails
Dummy procedures can be defined as subprograms with explicit interfaces, e.g.
subroutine subr(dummy) interface subroutine dummy
[flang] Symbol representation for dummy SubprogramDetails
Dummy procedures can be defined as subprograms with explicit interfaces, e.g.
subroutine subr(dummy) interface subroutine dummy(x) real :: x end subroutine end interface ! ... end subroutine
but the symbol table had no means of marking such symbols as dummy arguments, so predicates like IsDummy(dummy) would fail. Add an isDummy_ flag to SubprogramNameDetails, analogous to the corresponding flag in EntityDetails, and set/test it as needed.
Differential Revision: https://reviews.llvm.org/D106697
show more ...
|
|
Revision tags: llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2, llvmorg-12.0.1-rc1, llvmorg-12.0.0, llvmorg-12.0.0-rc5, llvmorg-12.0.0-rc4 |
|
| #
5d3249e9 |
| 24-Mar-2021 |
Tim Keith <[email protected]> |
[flang] Save binding labels as strings
Binding labels start as expressions but they have to evaluate to constant character of default kind, so they can be represented as an std::string. Leading and
[flang] Save binding labels as strings
Binding labels start as expressions but they have to evaluate to constant character of default kind, so they can be represented as an std::string. Leading and trailing blanks have to be removed, so the folded expression isn't exactly right anyway.
So all BIND(C) symbols now have a string binding label, either the default or user-supplied one. This is recorded in the .mod file.
Add WithBindName mix-in for details classes that can have a binding label so that they are all consistent. Add GetBindName() and SetBindName() member functions to Symbol.
Add tests that verifies that leading and trailing blanks are ignored in binding labels and that the default label is folded to lower case.
Differential Revision: https://reviews.llvm.org/D99208
show more ...
|
| #
a76d0207 |
| 24-Mar-2021 |
Tim Keith <[email protected]> |
Revert "[flang] Save binding labels as strings"
This reverts commit eb4ad0e3e3635194c21dccdd1c52027e632d2996.
This was causing a crash compiling omp_lib.f90
|
| #
eb4ad0e3 |
| 24-Mar-2021 |
Tim Keith <[email protected]> |
[flang] Save binding labels as strings
Binding labels start as expressions but they have to evaluate to constant character of default kind, so they can be represented as an std::string. Leading and
[flang] Save binding labels as strings
Binding labels start as expressions but they have to evaluate to constant character of default kind, so they can be represented as an std::string. Leading and trailing blanks have to be removed, so the folded expression isn't exactly right anyway.
So all BIND(C) symbols now have a string binding label, either the default or user-supplied one. This is recorded in the .mod file.
Add WithBindName mix-in for details classes that can have a binding label so that they are all consistent. Add GetBindName() and SetBindName() member functions to Symbol.
Add tests that verifies that leading and trailing blanks are ignored in binding labels and that the default label is folded to lower case.
Differential Revision: https://reviews.llvm.org/D99208
show more ...
|
|
Revision tags: llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2 |
|
| #
bdb40dd1 |
| 04-Feb-2021 |
Mehdi Chinoune <[email protected]> |
[flang][msvc] Reapply "Explicitly reference "this" inside closure"
Reapply {D88052}
Reviewed By: Meinersbur
Differential Revision: https://reviews.llvm.org/D96066
|
|
Revision tags: llvmorg-11.1.0, llvmorg-11.1.0-rc3, llvmorg-12.0.0-rc1, llvmorg-13-init, llvmorg-11.1.0-rc2, llvmorg-11.1.0-rc1, llvmorg-11.0.1, llvmorg-11.0.1-rc2 |
|
| #
3a0352b8 |
| 16-Dec-2020 |
Tim Keith <[email protected]> |
[flang] Fix bug with USE of USE of generic
When merging use associations into a generic, we weren't handling the case where the name that was use associated was itself a use association. This is fix
[flang] Fix bug with USE of USE of generic
When merging use associations into a generic, we weren't handling the case where the name that was use associated was itself a use association. This is fixed by following that association to its ultimate symbol (`useUltimate` in `DoAddUse`).
An example of the bug is `m12d` in `resolve17.f90`. `g` is associated with `gc` in `m12c` which is associated with `gb` in `m12b`. It was that last association that we weren't correctly following.
Differential Revision: https://reviews.llvm.org/D93343
show more ...
|
| #
86f59de1 |
| 02-Dec-2020 |
Tim Keith <[email protected]> |
[flang] Fix bugs related to merging generics during USE
When the same generic name is use-associated from two modules, the generics are merged into a single one in the current scope. This change fix
[flang] Fix bugs related to merging generics during USE
When the same generic name is use-associated from two modules, the generics are merged into a single one in the current scope. This change fixes some bugs in that process.
When a generic is merged, it can have two specific procedures with the same name as the generic (c.f. module m7c in modfile07.f90). We were disallowing that by checking for duplicate names in the generic rather than duplicate symbols. Changing `namesSeen` to `symbolsSeen` in `ResolveSpecificsInGeneric` fixes that.
We weren't including each USE of those generics in the .mod file so in some cases they were incorrect. Extend GenericDetails to specify all use-associated symbols that are merged into the generic. This is used to write out .mod files correctly.
The distinguishability check for specific procedures of a generic sometimes have to refer to procedures from a use-associated generic in error messages. In that case we don't have the source location of the procedure so adapt the message to say where is was use-associated from. This requires passing the scope through the checks to make that determination.
Differential Revision: https://reviews.llvm.org/D92492
show more ...
|
|
Revision tags: llvmorg-11.0.1-rc1 |
|
| #
c1168676 |
| 30-Oct-2020 |
peter klausler <[email protected]> |
[flang] Add warning for FINAL pitfall
Fortran's FINAL feature is sensitive to object rank. When an object's rank excludes it from finalization, but the type has FINAL subroutines for other ranks, em
[flang] Add warning for FINAL pitfall
Fortran's FINAL feature is sensitive to object rank. When an object's rank excludes it from finalization, but the type has FINAL subroutines for other ranks, emit a warning. This should be especially helpful in the case of a scalar FINAL subroutine not being declared (IMPURE) ELEMENTAL.
Differential revision: https://reviews.llvm.org/D90495
show more ...
|
|
Revision tags: llvmorg-11.0.0, llvmorg-11.0.0-rc6 |
|
| #
37b2e2b0 |
| 30-Sep-2020 |
peter klausler <[email protected]> |
[flang] Semantic analysis for FINAL subroutines
Represent FINAL subroutines in the symbol table entries of derived types. Enforce constraints. Update tests that have inadvertent violations or modi
[flang] Semantic analysis for FINAL subroutines
Represent FINAL subroutines in the symbol table entries of derived types. Enforce constraints. Update tests that have inadvertent violations or modified messages. Added a test.
The specific procedure distinguishability checking code for generics was used to enforce distinguishability of FINAL procedures. (Also cleaned up some confusion and redundancy noticed in the type compatibility infrastructure while digging into that area.)
Differential revision: https://reviews.llvm.org/D88613
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4 |
|
| #
62afc312 |
| 22-Sep-2020 |
Michael Kruse <[email protected]> |
[flang][msvc] Explicitly reference "this" inside closure. NFC.
The Microsoft compiler seems to have difficulties to decide between a const/non-const method of a captured object context in a closure.
[flang][msvc] Explicitly reference "this" inside closure. NFC.
The Microsoft compiler seems to have difficulties to decide between a const/non-const method of a captured object context in a closure. The error message is: ``` symbol.cpp(261): error C2668: 'Fortran::semantics::Symbol::detailsIf': ambiguous call to overloaded function symbol.h(535): note: could be 'const D *Fortran::semantics::Symbol::detailsIf<Fortran::semantics::DerivedTypeDetails>(void) const' symbol.h(534): note: or 'D *Fortran::semantics::Symbol::detailsIf<Fortran::semantics::DerivedTypeDetails>(void)' symbol.cpp(261): note: while trying to match the argument list '()' ``` Explicitly using the this-pointer resolves this problem.
This patch is part of the series to make flang compilable with MS Visual Studio <http://lists.llvm.org/pipermail/flang-dev/2020-July/000448.html>.
Reviewed By: DavidTruby
Differential Revision: https://reviews.llvm.org/D88052
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc3 |
|
| #
398fcf22 |
| 11-Sep-2020 |
Peter Steinfeld <[email protected]> |
[flang] Fix bug for forward referenced type
A type name in an IMPLICIT declaration that was later used in a PARAMETER statement caused problems because the default symbol scope had not yet been init
[flang] Fix bug for forward referenced type
A type name in an IMPLICIT declaration that was later used in a PARAMETER statement caused problems because the default symbol scope had not yet been initialized. I avoided dereferencing in the situation where the default scope was uninitialized and added a test that triggers the problem.
Differential Revision: https://reviews.llvm.org/D87535
show more ...
|
|
Revision tags: llvmorg-11.0.0-rc2, llvmorg-11.0.0-rc1 |
|
| #
412056e2 |
| 24-Jul-2020 |
Tim Keith <[email protected]> |
[flang] Implicitly convert result of statement function
The result of a statement function may require an implicit conversion to match its result type. Add that to the expression that represents the
[flang] Implicitly convert result of statement function
The result of a statement function may require an implicit conversion to match its result type. Add that to the expression that represents the statement function body in SubprogramDetails.
Extract the analysis of that expression into a separate function.
Dump the statement function expression as part of the dump of SubprogramDetails.
Differential Revision: https://reviews.llvm.org/D84452
show more ...
|
|
Revision tags: llvmorg-12-init |
|
| #
85d9745c |
| 09-Jul-2020 |
Pete Steinfeld <[email protected]> |
[flang] Fix a crash when creating generics from a copy
Summary: When a program unit creates a generic based on one defined in a module, the function `CopyFrom()` is called to create the `GenericDeta
[flang] Fix a crash when creating generics from a copy
Summary: When a program unit creates a generic based on one defined in a module, the function `CopyFrom()` is called to create the `GenericDetails`. This function copied the `specificProcs_` but failed to copy the `bindingNames_`. If the function `CheckGeneric()` then gets called, it tries to index into the empty binding names and causes the crash.
I fixed this by adding code to `CopyFrom()` to copy the binding names.
I also added a test that causes the crash.
Reviewers: klausler, tskeith, DavidTruby
Subscribers: llvm-commits
Tags: #llvm, #flang
Differential Revision: https://reviews.llvm.org/D83491
show more ...
|
|
Revision tags: llvmorg-10.0.1, llvmorg-10.0.1-rc4, llvmorg-10.0.1-rc3, llvmorg-10.0.1-rc2 |
|
| #
14f49599 |
| 29-May-2020 |
Tim Keith <[email protected]> |
[flang][NFC] Remove link-time dependency of Evaluate on Semantics
Summary: Some Symbol-related functions used in Evaluate were moved to Evaluate/tools.h. This includes changing some member functions
[flang][NFC] Remove link-time dependency of Evaluate on Semantics
Summary: Some Symbol-related functions used in Evaluate were moved to Evaluate/tools.h. This includes changing some member functions that were replaced by non-member functions `IsDummy`, `GetUsedModule`, and `CountLenParameters`.
Some member functions were made inline in `Scope`, `Symbol`, `ArraySpec`, and `DeclTypeSpec`. The definitions were preceded by a comment explaining why they are inline.
`IsConstantShape` was expanded inline in `IsDescriptor` because it isn't used anywhere else
After this change, at least when compiling with clang on macos, `libFortranEvaluate.a` has no undefined symbols that are satisfied by `libFortranSemantics.a`.
Reviewers: klausler, PeteSteinfeld, sscalpone, jdoerfert, DavidTruby
Reviewed By: PeteSteinfeld
Subscribers: llvm-commits
Tags: #flang, #llvm
Differential Revision: https://reviews.llvm.org/D80762
show more ...
|