|
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 |
|
| #
23c2bedf |
| 01-Jul-2022 |
Peter Klausler <[email protected]> |
[flang] Establish a single source of target information for semantics
Create a TargetCharacteristics class to centralize the few items of target specific information that are relevant to semantics.
[flang] Establish a single source of target information for semantics
Create a TargetCharacteristics class to centralize the few items of target specific information that are relevant to semantics. Use the new class for all target queries, including derived type component layout modeling.
Future work will initialize this class with target information provided or forwarded by the drivers, and use it to fold layout-dependent intrinsic functions like TRANSFER().
Differential Revision: https://reviews.llvm.org/D129018
Updates: Attempts to work around build issues on Windows.
show more ...
|
|
Revision tags: llvmorg-14.0.6, llvmorg-14.0.5, llvmorg-14.0.4 |
|
| #
03095bd9 |
| 19-May-2022 |
Peter Klausler <[email protected]> |
[flang] Fix crash in semantics after PDT instantiation
The code in semantics that reinitializes symbol table pointers in the parse tree of a parameterized derived type prior to a new instantiation o
[flang] Fix crash in semantics after PDT instantiation
The code in semantics that reinitializes symbol table pointers in the parse tree of a parameterized derived type prior to a new instantiation of the type was processing the symbols of the derived type instantiation scope in arbitrary address order, which could fail if a reference to a type parameter inherited from an ancestor type was processed prior to the parent component sequence. Fix by instantiating components of PDT instantiations in declaration order.
Differential Revision: https://reviews.llvm.org/D126147
show more ...
|
|
Revision tags: llvmorg-14.0.3, llvmorg-14.0.2 |
|
| #
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 ...
|
|
Revision tags: llvmorg-14.0.1 |
|
| #
142cbd50 |
| 04-Apr-2022 |
Peter Klausler <[email protected]> |
[flang] Fix TYPE/CLASS IS (T(...)) in SELECT TYPE
TYPE IS and CLASS IS guards in SELECT TYPE constructs are allowed to specify the same type as the type of the selector but f18's implementation of t
[flang] Fix TYPE/CLASS IS (T(...)) in SELECT TYPE
TYPE IS and CLASS IS guards in SELECT TYPE constructs are allowed to specify the same type as the type of the selector but f18's implementation of that predicate required strict equality of the derived type representations. We need to allow for assumed values of LEN type parameters to match explicit and deferred type parameter values in the selector and require equality for KIND type parameters. Implement DerivedTypeSpec::Match() to perform this more relaxed type comparison, and use it in check-select-type.cpp.
Differential Revision: https://reviews.llvm.org/D123721
show more ...
|
| #
b8e8f62d |
| 04-Apr-2022 |
Jean Perier <[email protected]> |
[flang] Fold instantiated PDT character component length when needed
In case a character component PDT length only depends on kind parameters, fold it while instantiating the PDT. This is especially
[flang] Fold instantiated PDT character component length when needed
In case a character component PDT length only depends on kind parameters, fold it while instantiating the PDT. This is especially important if the component has an initializer because later semantic phases (offset computation or runtime type info generation) might get confused and generate offset/type info that will lead to crashes in lowering.
Differential Revision: https://reviews.llvm.org/D122938
show more ...
|
|
Revision tags: llvmorg-14.0.0, llvmorg-14.0.0-rc4, llvmorg-14.0.0-rc3, llvmorg-14.0.0-rc2, llvmorg-14.0.0-rc1 |
|
| #
c4f67ea1 |
| 07-Feb-2022 |
Peter Klausler <[email protected]> |
[flang] Allow DATA initialization of derived types w/ allocatable components
While one cannot of course statically initialize an allocatable component of an instance of a derived type, its mere pres
[flang] Allow DATA initialization of derived types w/ allocatable components
While one cannot of course statically initialize an allocatable component of an instance of a derived type, its mere presence should not prevent DATA initialization of the other nonallocatable components. Semantics was treating the existence of an allocatable component as a case of "default initialization", which it is, but not one that should run afoul of C877. Add another Boolean argument to IsInitialized() to allow for a more nuanced test.
Differential Revision: https://reviews.llvm.org/D119449
show more ...
|
|
Revision tags: llvmorg-15-init, llvmorg-13.0.1, llvmorg-13.0.1-rc3, llvmorg-13.0.1-rc2 |
|
| #
f2dac557 |
| 10-Jan-2022 |
Peter Klausler <[email protected]> |
[flang] Intrinsic assignment of distinct but "same" derived types
Subclause 7.5.2.4 lists conditions under which two distinct derived types are to be considered the same type for purposes of argumen
[flang] Intrinsic assignment of distinct but "same" derived types
Subclause 7.5.2.4 lists conditions under which two distinct derived types are to be considered the same type for purposes of argument association, assignment, and so on. These conditions are implemented in evaluate::IsTkCompatibleWith(), but assignment semantics doesn't use it for testing for intrinsic assignment compatibility. Fix that.
Differential Revision: https://reviews.llvm.org/D117621
show more ...
|
| #
c14cf92b |
| 18-Dec-2021 |
Peter Klausler <[email protected]> |
[flang] Implement semantics for DEC STRUCTURE/RECORD
Implements part of the legacy "DEC structures" feature from VMS Fortran. STRUCTUREs are processed as if they were derived types with SEQUENCE.
[flang] Implement semantics for DEC STRUCTURE/RECORD
Implements part of the legacy "DEC structures" feature from VMS Fortran. STRUCTUREs are processed as if they were derived types with SEQUENCE. DATA-like object entity initialization is supported as well (e.g., INTEGER FOO/666/) since it was used for default component initialization in structures. Anonymous components (named %FILL) are also supported.
These features, and UNION/MAP, were already being parsed. An omission in the collection of structure field names in the case of nested structures with entity declarations was fixed in the parser.
Structures are supported in modules, but this is mostly for testing purposes. The names of fields in structures accessed via USE association cannot appear with dot notation in client code (at least not yet). DEC structures antedate Fortran 90, so their actual use in applications should not involve modules.
This patch does not implement UNION/MAP, since that feature would impose difficulties later in lowering them to MLIR types. In the meantime, if they appear, semantics will issue a "not yet implemented" error message.
Differential Revision: https://reviews.llvm.org/D117151
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, 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 |
|
| #
a48e4168 |
| 19-Jul-2021 |
peter klausler <[email protected]> |
[flang] Run-time derived type initialization and destruction
Use derived type information tables to drive default component initialization (when needed), component destruction, and calls to final su
[flang] Run-time derived type initialization and destruction
Use derived type information tables to drive default component initialization (when needed), component destruction, and calls to final subroutines. Perform these operations automatically for ALLOCATE()/DEALLOCATE() APIs for allocatables, automatics, and pointers. Add APIs for use in lowering to perform these operations for non-allocatable/automatic non-pointer variables. Data pointer component initialization supports arbitrary constant designators, a F'2008 feature, which may be a first for Fortran implementations.
Differential Revision: https://reviews.llvm.org/D106297
show more ...
|
|
Revision tags: llvmorg-12.0.1, llvmorg-12.0.1-rc4, llvmorg-12.0.1-rc3, llvmorg-12.0.1-rc2 |
|
| #
2b795ec6 |
| 04-Jun-2021 |
Peter Steinfeld <[email protected]> |
[flang] Check for undefined derived types
It's possible to specify refer to an undefined derived type as the type of a component of another derived type and then never define the type of the compone
[flang] Check for undefined derived types
It's possible to specify refer to an undefined derived type as the type of a component of another derived type and then never define the type of the component. We were not detecting this situation. To fix this, I changed the value of isForwardReferenced_ in the symbol's DerivedTypeDetails and checked for it when performing other derived type checks.
I also had to record the fact that error messages were previously emitted for the same problem in some cases so that I could avoid duplicate messages.
I also added a test.
Differential Revision: https://reviews.llvm.org/D103714
show more ...
|
|
Revision tags: llvmorg-12.0.1-rc1 |
|
| #
803f1e46 |
| 21-Apr-2021 |
peter klausler <[email protected]> |
[flang] Fix spurious errors from runtime derived type table construction
Andrezj W. @ Arm discovered that the runtime derived type table building code in semantics was detecting fatal errors in the
[flang] Fix spurious errors from runtime derived type table construction
Andrezj W. @ Arm discovered that the runtime derived type table building code in semantics was detecting fatal errors in the tests that the f18 driver wasn't printing. This patch fixes f18 so that these messages are printed; however, the messages were not valid user errors, and the rest of this patch fixes them up.
There were two sources of the bogus errors. One was that the runtime derived type information table builder was calculating the shapes of allocatable and pointer array components in derived types, and then complaining that they weren't constant or LEN parameter values, which of course they couldn't be since they have to have deferred shapes and those bounds were expressions like LBOUND(component,dim=1).
The second was that f18 was forwarding the actual LEN type parameter expressions of a type instantiation too far into the uses of those parameters in various expressions in the declarations of components; when an actual LEN type parameter is not a constant value, it needs to remain a "bare" type parameter inquiry so that it will be lowered to a descriptor inquiry and acquire a captured expression value.
Fixing this up properly involved: moving some code into new utility function templates in Evaluate/tools.h, tweaking the rewriting of conversions in expression folding to elide needless integer kind conversions of type parameter inquiries, making type parameter inquiry folding *not* replace bare LEN type parameters with non-constant actual parameter values, and cleaning up some altered test results.
Differential Revision: https://reviews.llvm.org/D101001
show more ...
|
| #
e9be1e7d |
| 21-Apr-2021 |
Peter Steinfeld <[email protected]> |
[flang] Fix checking of argument passing for parameterized derived types
We were erroneously not taking into account the constant values of LEN type parameters of parameterized derived types when ch
[flang] Fix checking of argument passing for parameterized derived types
We were erroneously not taking into account the constant values of LEN type parameters of parameterized derived types when checking for argument compatibility. The required checks are identical to those for assignment compatibility. Since argument compatibility is checked in .../lib/Evaluate and assignment compatibility is checked in .../lib/Semantics, I moved the common code into .../lib/Evaluate/tools.cpp and changed the assignment compatibility checking code to call it.
After implementing these new checks, tests in resolve53.f90 were failing because the tests were erroneous. I fixed these tests and added new tests to call03.f90 to test argument passing of parameterized derived types more completely.
Differential Revision: https://reviews.llvm.org/D100989
show more ...
|
| #
d667b96c |
| 20-Apr-2021 |
Peter Steinfeld <[email protected]> |
[flang] Fix assignment of parameterized derived types
We were erroneously emitting error messages for assignments of derived types where the associated objects were instantiated with non-constant LE
[flang] Fix assignment of parameterized derived types
We were erroneously emitting error messages for assignments of derived types where the associated objects were instantiated with non-constant LEN type parameters.
I fixed this by adding the member function MightBeAssignmentCompatibleWith() to the class DerivedTypeSpec and calling it to determine whether it's possible that objects of parameterized derived types can be assigned to each other. Its implementation first compares the uninstantiated values of the types. If they are equal, it then compares the values of the constant instantiated type parameters.
I added tests to assign04.f90 to exercise this new code.
Differential Revision: https://reviews.llvm.org/D100868
show more ...
|
| #
bef63dc8 |
| 12-Apr-2021 |
Peter Steinfeld <[email protected]> |
[flang] Handle instantiation of procedure pointer components
We were not instantiating procedure pointer components. If the instantiation contained errors, we were not reporting them. This resulte
[flang] Handle instantiation of procedure pointer components
We were not instantiating procedure pointer components. If the instantiation contained errors, we were not reporting them. This resulted in internal errors in later processing.
I fixed this by adding code in .../lib/Semantics/type.cpp in InstantiateComponent() to handle a component with ProcEntityDetails. I also added several tests for various good and bad instantiations of procedure pointer components.
Differential Revision: https://reviews.llvm.org/D100341
show more ...
|
| #
5091671c |
| 07-Apr-2021 |
peter klausler <[email protected]> |
[flang] Enforce a limit on recursive PDT instantiations
For pernicious test cases with explicit non-constant actual type parameter expressions in components, e.g.:
type :: t(k) integer, kind
[flang] Enforce a limit on recursive PDT instantiations
For pernicious test cases with explicit non-constant actual type parameter expressions in components, e.g.:
type :: t(k) integer, kind :: k type(t(k+1)), pointer :: p end type
we should detect the infinite recursion and complain rather than looping until the stack overflows.
Differential Revision: https://reviews.llvm.org/D100065
show more ...
|
|
Revision tags: llvmorg-12.0.0, llvmorg-12.0.0-rc5 |
|
| #
52cc9df1 |
| 06-Apr-2021 |
Peter Steinfeld <[email protected]> |
[flang] Improve constant folding for type parameter inquiries
We were not folding type parameter inquiries for the form 'var%typeParam' where 'typeParam' was a KIND or LEN type parameter of a derive
[flang] Improve constant folding for type parameter inquiries
We were not folding type parameter inquiries for the form 'var%typeParam' where 'typeParam' was a KIND or LEN type parameter of a derived type and 'var' was a designator of the derived type. I fixed this by adding code to the function 'FoldOperation()' for 'TypeParamInquiry's to handle this case. I also cleaned up the code for the case where there is no designator.
In order to make the error messages correctly refer to both the points of declaration and instantiation, I needed to add an argument to the function 'InstantiateIntrinsicType()' for the location of the instantiation.
I also changed the formatting of 'TypeParamInquiry' to correctly format this case. I also added tests for both KIND and LEN type parameter inquiries in resolve104.f90.
Making these changes revealed an error in resolve89.f90 and caused one of the error messages in assign04.f90 to be different.
Reviewed By: klausler
Differential Revision: https://reviews.llvm.org/D99892
show more ...
|
| #
b7ef8048 |
| 06-Apr-2021 |
Kiran Chandramohan <[email protected]> |
Revert "[flang] Improve constant folding for type parameter inquiries"
This reverts commit 8c7bf2f93da9b64b07509f67552d592a86260ff5.
|
| #
8c7bf2f9 |
| 05-Apr-2021 |
Peter Steinfeld <[email protected]> |
[flang] Improve constant folding for type parameter inquiries
We were not folding type parameter inquiries for the form 'var%typeParam' where 'typeParam' was a KIND or LEN type parameter of a derive
[flang] Improve constant folding for type parameter inquiries
We were not folding type parameter inquiries for the form 'var%typeParam' where 'typeParam' was a KIND or LEN type parameter of a derived type and 'var' was a designator of the derived type. I fixed this by adding code to the function 'FoldOperation()' for 'TypeParamInquiry's to handle this case. I also cleaned up the code for the case where there is no designator.
In order to make the error messages correctly refer to both the points of declaration and instantiation, I needed to add an argument to the function 'InstantiateIntrinsicType()' for the location of the instantiation.
I also changed the formatting of 'TypeParamInquiry' to correctly format this case. I also added tests for both KIND and LEN type parameter inquiries in resolve104.f90.
Making these changes revealed an error in resolve89.f90 and caused one of the error messages in assign04.f90 to be different.
Differential Revision: https://reviews.llvm.org/D99892
show more ...
|
|
Revision tags: llvmorg-12.0.0-rc4, llvmorg-12.0.0-rc3, llvmorg-12.0.0-rc2, llvmorg-11.1.0, llvmorg-11.1.0-rc3 |
|
| #
ebe74d95 |
| 29-Jan-2021 |
peter klausler <[email protected]> |
[flang] Support disabled alternative PARAMETER statement
Legacy Fortran implementations support an alternative form of the PARAMETER statement; it differs syntactically from the standard's PARAMETER
[flang] Support disabled alternative PARAMETER statement
Legacy Fortran implementations support an alternative form of the PARAMETER statement; it differs syntactically from the standard's PARAMETER statement by lacking parentheses, and semantically by using the type and shape of the initialization expression to define the attributes of the named constant. (GNU Fortran gets that part wrong; Intel Fortran and nvfortran have full support.)
This patch disables the old style PARAMETER statement by default, as it is syntactically ambiguous with conforming assignment statements; adds a new "-falternative-parameter-statement" option to enable it; and implements it correctly when enabled.
Fixes https://bugs.llvm.org/show_bug.cgi?id=48774, in which a user tripped over the syntactic ambiguity.
Differential Revision: https://reviews.llvm.org/D95697
show more ...
|
|
Revision tags: 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 |
|
| #
6aa3591e |
| 15-Dec-2020 |
peter klausler <[email protected]> |
[flang] Implement STORAGE_SIZE(), SIZEOF(), C_SIZEOF()
STORAGE_SIZE() is a standard inquiry intrinsic (size in bits of an array element of the same type as the argument); SIZEOF() is a common extens
[flang] Implement STORAGE_SIZE(), SIZEOF(), C_SIZEOF()
STORAGE_SIZE() is a standard inquiry intrinsic (size in bits of an array element of the same type as the argument); SIZEOF() is a common extension that returns the size in bytes of its argument; C_SIZEOF() is a renaming of SIZEOF() in module ISO_C_BINDING.
STORAGE_SIZE() and SIZEOF() are implemented via rewrites to expressions; these expressions will be constant when the necessary type parameters and bounds are also constant.
Code to calculate the sizes of types (with and without alignment) was isolated into Evaluate/type.* and /characteristics.*. Code in Semantics/compute-offsets.* to calculate sizes and alignments of derived types' scopes was exposed so that it can be called at type instantiation time (earlier than before) so that these inquiry intrinsics could be called from specification expressions.
Differential Revision: https://reviews.llvm.org/D93322
show more ...
|
| #
641ede93 |
| 07-Dec-2020 |
peter klausler <[email protected]> |
[flang] Improve initializer semantics, esp. for component default values
This patch plugs many holes in static initializer semantics, improves error messages for default initial values and other com
[flang] Improve initializer semantics, esp. for component default values
This patch plugs many holes in static initializer semantics, improves error messages for default initial values and other component properties in parameterized derived type instantiations, and cleans up several small issues noticed during development. We now do proper scalar expansion, folding, and type, rank, and shape conformance checking for component default initializers in derived types and PDT instantiations. The initial values of named constants are now guaranteed to have been folded when installed in the symbol table, and are no longer folded or scalar-expanded at each use in expression folding. Semantics documentation was extended with information about the various kinds of initializations in Fortran and when each of them are processed in the compiler.
Some necessary concomitant changes have bulked this patch out a bit: * contextual messages attachments, which are now produced for parameterized derived type instantiations so that the user can figure out which instance caused a problem with a component, have been added as part of ContextualMessages, and their implementation was debugged * several APIs in evaluate::characteristics was changed so that a FoldingContext is passed as an argument rather than just its intrinsic procedure table; this affected client call sites in many files * new tools in Evaluate/check-expression.cpp to determine when an Expr actually is a single constant value and to validate a non-pointer variable initializer or object component default value * shape conformance checking has additional arguments that control whether scalar expansion is allowed * several now-unused functions and data members noticed and removed * several crashes and bogus errors exposed by testing this new code were fixed * a -fdebug-stack-trace option to enable LLVM's stack tracing on a crash, which might be useful in the future
TL;DR: Initialization processing does more and takes place at the right times for all of the various kinds of things that can be initialized.
Differential Review: https://reviews.llvm.org/D92783
show more ...
|
|
Revision tags: llvmorg-11.0.1-rc1, llvmorg-11.0.0, llvmorg-11.0.0-rc6, llvmorg-11.0.0-rc5, llvmorg-11.0.0-rc4, llvmorg-11.0.0-rc3 |
|
| #
f862d858 |
| 31-Aug-2020 |
peter klausler <[email protected]> |
[flang] Check shape conformance on initializers
Specifically, ensure that initializers conform with their objects according to 8.2 para 4.
Differential Revision: https://reviews.llvm.org/D86886
|
| #
627e9007 |
| 28-Aug-2020 |
Tim Keith <[email protected]> |
[flang][NFC] Change how error symbols are recorded
When an error is associated with a symbol, it was marked with a flag from Symbol::Flag. The problem with that is that you need a mutable symbol to
[flang][NFC] Change how error symbols are recorded
When an error is associated with a symbol, it was marked with a flag from Symbol::Flag. The problem with that is that you need a mutable symbol to do that. Instead, store the set of error symbols in the SemanticsContext. This allows for some const_casts to be eliminated.
Also, improve the internal error that occurs if SetError is called but no fatal error has been reported.
Differential Revision: https://reviews.llvm.org/D86740
show more ...
|