Tim Keith [Fri, 21 Feb 2020 23:48:52 +0000 (15:48 -0800)]
[flang] Merge pull request flang-compiler/f18#1009 from flang-compiler/tsk-where
Add more checks on WHERE and FORALL
Original-commit: flang-compiler/f18@
c9638d10c6515703e8c095127bd46ae1dae1637e
Reviewed-on: https://github.com/flang-compiler/f18/pull/1009
Tim Keith [Thu, 20 Feb 2020 22:54:46 +0000 (14:54 -0800)]
[flang] Add more checks on WHERE and FORALL
Check that masks and LHS of assignments in WHERE statements and
constructs have consistent shapes. They must all have the same rank and
any extents that are compile-time constants must match.
Emit a warning for assignments in FORALL statements and constructs where
the LHS does not reference each of the index variables.
Original-commit: flang-compiler/f18@
8b04dbebcf5621cfd571a8c45878cebcd1a1bfb0
Reviewed-on: https://github.com/flang-compiler/f18/pull/1009
Tim Keith [Fri, 21 Feb 2020 23:46:24 +0000 (15:46 -0800)]
[flang] Merge pull request flang-compiler/f18#1012 from flang-compiler/tsk-rewrite
Fix parsing bug on DATA statement
Original-commit: flang-compiler/f18@
b9f2617f55bd3be8414f8d8f078f53f0bf881667
Reviewed-on: https://github.com/flang-compiler/f18/pull/1012
Tim Keith [Fri, 21 Feb 2020 23:31:12 +0000 (15:31 -0800)]
[flang] Fix parsing bug on DATA statement
This DATA statement was getting a parsing error:
`data x /a(i)%b/`
The parser was expecting the ending '/' where the '%' was. The problem
was parsing `a(i)` as a structure constructor. Instead, move the
constant subobject case before structure constructor, but match it only
if not followed by '('. That is because in `data x /a(1)(2)/`, `a(1)` is
a valid structure constructor.
Also, remove the NamedConstant alternative from DataStmtRepeat. A named
constant is always parsed as a ConstantSubobject so it can never occur.
Original-commit: flang-compiler/f18@
04a76b272675d47ec7752420b15976c69a907dab
Reviewed-on: https://github.com/flang-compiler/f18/pull/1012
Anchu Rajendran S [Fri, 21 Feb 2020 06:19:14 +0000 (11:49 +0530)]
[flang] Issue flang-compiler/f18#992 : Implementing Semantic checks for DATA Statement (C874-C887) (flang-compiler/f18#992)
This commit covers Semantic Constraints C882 - C887
C882 : It was partially Implemented. Finished the implementation
and added test case
C884 : Implemented and added test case
C883 : Implementation was there already. Added test case
C885, C886, C887 : Implementation was there already. Added test case for
data-repeat.
Original-commit: flang-compiler/f18@
822129736b6b7a96b6ff3ffe810d842ce42e3672
Reviewed-on: https://github.com/flang-compiler/f18/pull/992
Isuru Fernando [Thu, 20 Feb 2020 21:12:49 +0000 (15:12 -0600)]
[flang] Add missing array include (flang-compiler/f18#1004)
Original-commit: flang-compiler/f18@
de801a0db7614c93abc8239d02a453d60c9ea8a1
Reviewed-on: https://github.com/flang-compiler/f18/pull/1004
Isuru Fernando [Thu, 20 Feb 2020 19:33:43 +0000 (13:33 -0600)]
[flang] Disable 80-bit extended precision if on MSVC (flang-compiler/f18#1003)
Original-commit: flang-compiler/f18@
2c1fc63758eac43eb4d2fd4fdf1e7b0e63d52f70
Reviewed-on: https://github.com/flang-compiler/f18/pull/1003
Tim Keith [Wed, 19 Feb 2020 21:42:30 +0000 (13:42 -0800)]
[flang] Merge pull request flang-compiler/f18#989 from flang-compiler/tsk-forall
Add FORALL checking to DoChecker
Original-commit: flang-compiler/f18@
35fd0cda58776389d2ed68eaefbc1e1d59423ec8
Reviewed-on: https://github.com/flang-compiler/f18/pull/989
Tim Keith [Wed, 19 Feb 2020 21:28:19 +0000 (13:28 -0800)]
[flang] Rename DoChecker to DoForallChecker
This reflects the fact that it now performs checks on both DO
and FORALL constructs. Rename the source files as well.
Original-commit: flang-compiler/f18@
8ecb6a279f53ff4cc9493506370664fb1923470a
Reviewed-on: https://github.com/flang-compiler/f18/pull/989
Tim Keith [Wed, 19 Feb 2020 01:14:24 +0000 (17:14 -0800)]
[flang] Add FORALL checking to DoChecker
FORALL statements and constructs require a lot of the same checking
as DO CONCURRENT, so do the checks in DoChecker so that code can be
shared where possible. This requires some reorganization there.
Remove code from AssignmentChecker that did some of these checks.
Change names that contain `DoVar` or `DoVariable` to `IndexVar` to
reflect the fact that they may be DO or FORALL index variables.
Distinguish between the two when necessary with enum `IndexVarKind`.
Change some messages that referred to "concurrent-header" or
"concurrent-control" to specifically say "DO CONCURRENT" or "FORALL".
Original-commit: flang-compiler/f18@
84752c492e910573e2f0ede1ed3c0417aac363b9
Reviewed-on: https://github.com/flang-compiler/f18/pull/989
Tree-same-pre-rewrite: false
Tim Keith [Tue, 18 Feb 2020 23:20:28 +0000 (15:20 -0800)]
[flang] Reorganize evaluate::Assignment
Every analyzed assignment represented by `evaluate::Assignment` has
a LHS and RHS expression. These need to be checked uniformly in various
places. So change Assignment always to have those data members, with
the variant determining which kinds of assignment it is: intrinsic,
user-defined, or pointer.
Original-commit: flang-compiler/f18@
fb87d16a868112e26ade0ad696b2232d8cf3a524
Reviewed-on: https://github.com/flang-compiler/f18/pull/989
Tree-same-pre-rewrite: false
psteinfeld [Wed, 19 Feb 2020 20:24:46 +0000 (12:24 -0800)]
[flang] Merge pull request flang-compiler/f18#985 from flang-compiler/ps-types
Semantic checks for C709, C710, and C711
Original-commit: flang-compiler/f18@
fa6d4753b74d1fb5fa4b453d7c35de14910fd5be
Reviewed-on: https://github.com/flang-compiler/f18/pull/985
Pete Steinfeld [Fri, 14 Feb 2020 23:53:11 +0000 (15:53 -0800)]
[flang] Semantic checks for C709, C710, and C711
C709 An assumed-type entity shall be a dummy data object that does not
have the ALLOCATABLE, CODIMENSION, INTENT (OUT), POINTER, or VALUE
attribute and is not an explicit-shape array.
C710 An assumed-type variable name shall not appear in a designator or
expression except as an actual argument corresponding to a dummy
argument that is assumed-type, or as the first argument to the intrinsic
function IS_CONTIGUOUS, LBOUND, PRESENT, RANK, SHAPE, SIZE, or UBOUND,
or the function C_LOC from the intrinsic module ISO_C_BINDING.
C711 An assumed-type actual argument that corresponds to an assumed-rank
dummy argument shall be assumed-shape or assumed-rank.
For C709 I added code to check-declarations.cpp. For this, I had to
distinguish between polymorphic types and assumed-type types to
eliminate multiple messages on the same line.
C710 was already checked, but I added a notation in the source.
For C711 I added code to check-call.cpp and the test call15.f90.
Original-commit: flang-compiler/f18@
4a703f2b5a6484208a059dc0b456363c138a661d
Reviewed-on: https://github.com/flang-compiler/f18/pull/985
jeanPerier [Wed, 19 Feb 2020 18:44:59 +0000 (10:44 -0800)]
[flang] Merge pull request flang-compiler/f18#994 from flang-compiler/jpr-fix-shared-builds
Fix issues with -DBUILD_SHARED_LIBS=On
Original-commit: flang-compiler/f18@
a20a80e71e05f5ceea84e804e8f4d7bd4b7b52e9
Reviewed-on: https://github.com/flang-compiler/f18/pull/994
Jean Perier [Wed, 19 Feb 2020 13:19:08 +0000 (05:19 -0800)]
[flang] Fix issues with -DBUILD_SHARED_LIBS=On
This re-ordering allows building f18 with shared library using and LLVM build
with static libraries.
This reordering (that also made sens form an alphabetical point of view)
works here to do such "shared+archive" compiling because the current
dependency on LLVM is simple (only one f18 lib + an executable depends on LLVM).
As soon as two f18 libraries will depend on LLVM, one will have to use an LLVM
version built with -DBUILD_SHARED_LIBS=On if one wants to use this option
to compile f18.
Original-commit: flang-compiler/f18@
bbbbe9c1aa2fd38dc2164a6440290dbbea1518e2
Reviewed-on: https://github.com/flang-compiler/f18/pull/994
Jinxin (Brian) Yang [Wed, 19 Feb 2020 00:27:43 +0000 (16:27 -0800)]
[flang] [OpenMP] Predetermined rule for sequential loop index (flang-compiler/f18#976)
This commit implements rule:
A loop iteration variable for a sequential loop in a parallel or
task generating construct is private in the innermost such construct
that encloses the loop.
A Simple example:
```
i = -1 <== Scope 0
j = -1
!$omp parallel <== Scope 1
print *,i,j <-- both are shared (Scope 0)
!$omp parallel <== Scope 2
print *,i,j <-- a) i is shared (Scope 0), j is private (Scope 2)
!$omp do <== Scope 3
do i=1, 10 <-- i is private (Scope 3)
do j=1, 10 <-- b) j is private (Scope 2, not 3!)
enddo
enddo
print *,i,j <-- c) i is shared (Scope 0), j is private (Scope 2)
!$omp end parallel
print *,i,j <-- both are shared (Scope 0)
!$omp end parallel
print *,i,j <-- both are shared (Scope 0)
end
```
Ideally the above rule solves a), b), and c) but a) is left as a TODO
because it is better to handle the data-sharing attribute conflicts
along with the rules for "Predetermined DSA on Clauses".
The basic idea is when visiting the `DoConstruct` node within an OpenMP
construct, if the do-loop is not associated (like `i` loop is associated
with `!$omp do`) AND the do-loop is in the parallel/task generating
construct, resolve the loop index to be private to that innermost construct.
In the above example, `j` loop is not associated (then it is sequential) and
the innermost parallel/task generating construct that encloses the `j` loop
is the `parallel` construct marked with `<== Scope 2`, so `j` is private
to that construct. To do that, I also need to change the prototype of those
`ResolveOmp*` functions to allow specifiying the `scope` because the new
symbol for `j` should be created in Scope 2 and all the `symbol` field of
`Name j` in that `parallel` construct should be fixed, such as c).
Original-commit: flang-compiler/f18@
69a845283b058a3644053ec58b00d3361f4d4a59
Reviewed-on: https://github.com/flang-compiler/f18/pull/976
jeanPerier [Mon, 17 Feb 2020 17:47:01 +0000 (09:47 -0800)]
[flang] Merge pull request flang-compiler/f18#959 from jeanPerier/jpr-mono-split
RFC: FIR Merge - PR1: Add PFTBuilder structure to help lowering the parse-tree
Original-commit: flang-compiler/f18@
f28afa7138a55c0af3aadc8028844012ce8e6191
Reviewed-on: https://github.com/flang-compiler/f18/pull/959
Jean Perier [Tue, 28 Jan 2020 12:58:30 +0000 (04:58 -0800)]
[flang] Add Pre-FIR Tree structure to help lowering the parse-tree
The Pre-FIR Tree structure is a transient data structure that
is meant to be built from the parse tree just before lowering to
FIR and that will be deleted just afterwards. It is not meant to perfrom
optimization analysis and transformations. It only provides temporary
information, such as label target information or parse tree parent nodes,
that is meant to be used to lower the parse tree structure into
FIR operations.
A PFTBuilder class builds the Pre-Fir Tree from the parse-tree.
A pretty printer is available to visualize this data structure.
- Lit tests are added to:
1. that the PFT tree structure is as expected
2. that the PFT captures all intented nodes
- Cmake changes: Prevent warnings inisde LLVM headers when compiling flang
The issue is that some LLVM headers define functions where the usage of
the parameters depend on environment ifdef. See for instance Size in:
https://github.com/llvm/llvm-project/blob/
5f940220bf9438e95ffa4a627ac1591be1e1ba6e/llvm/include/llvm/Support/Compiler.h#L574
Because flang is build with -Werror and -Wunused-parameter is default in
clang, this may breaks build in some environments (like with clang9 on macos).
A solution would be to add -Wno-unused-parameter to flang CmakLists.txt,
but it is wished to keep this warning on flang sources for quality purposes.
Fixing LLVM headers is not an easy task and `[[maybe_unused]]` is C++17 and
cannot be used yet in LLVM headers.
Hence, this fix simply silence warnings coming from LLVM headers by telling
CMake they are to be considered as if they were system headers.
- drone.io changes: remove llvm 6.0 from clang config in drone.io and link
flang with libstdc++ instead of libc++
llvm-dev resolved to llvm-6.0 in clang builds on drone.io. llvm 6.0 too old.
LLVM packages are linked with libstdc++ standard library whereas libc++ was
used for flang. This caused link time failure when building clang. Change
frone.io to build flang with libc++.
Note:
This commit does not reflect an actual work log, it is a feature based split of the
changes done in the FIR experimental branch. The related work log can be found in the
commits between:
864898cbe509d032abfe1172ec367dbd3dd92bc1
and
137c23da9c64cf90584cf81fd646053a69e91f63
Other changes come from https://github.com/flang-compiler/f18/pull/959 review.
Original-commit: flang-compiler/f18@
edb0943bca4b81689f320bda341040bf255d6e2e
Reviewed-on: https://github.com/flang-compiler/f18/pull/959
Jean Perier [Tue, 21 Jan 2020 15:41:52 +0000 (07:41 -0800)]
[flang] Add clang-format files for FIR source (LLVM style)
Note:
This commit does not reflect an actual work log, it is a feature based split of the
changes done in the FIR experimental branch. The related work log can be found in the commits between:
https://github.com/schweitzpgi/f18/commit/
8c320e3bf2c3e9cdac66c81db3bf4634bf972e1d
and:
https://github.com/schweitzpgi/f18/commit/
9b9ea05f9a75608c7bb5372c56bf7b9363569a69
Original-commit: flang-compiler/f18@
00d8d5121cdaed09e584a0aea7d59baf322bfaa3
Reviewed-on: https://github.com/flang-compiler/f18/pull/959
Tree-same-pre-rewrite: false
psteinfeld [Fri, 14 Feb 2020 17:27:52 +0000 (09:27 -0800)]
[flang] Merge pull request flang-compiler/f18#981 from flang-compiler/ps-c708
Semantic check for C708
Original-commit: flang-compiler/f18@
4d4b375d14810223badee7b47a151bc1d7ebab5b
Reviewed-on: https://github.com/flang-compiler/f18/pull/981
Pete Steinfeld [Tue, 11 Feb 2020 20:14:04 +0000 (12:14 -0800)]
[flang] Semantic check for C708
An entity declared with the CLASS keyword shall be a dummy argument or
have the ALLOCATABLE or POINTER attribute.
Implementing this check revealed a problem in the test resolve44.cpp.
It also showed that we were doing semantic checking on the entities
created by the compiler for LOCAL and LOCAL_INIT locality-specs. So I
changed the creation of symbols associated with LOCAL and LOCAL_INIT
locality-specs to be host associated with the outer symbol rather than
new object entities. In the process, I also changed things so that the
`parser::Name` associated with the newly created symbols was set to the
symbol rather than being set to nullptr.
Original-commit: flang-compiler/f18@
5dd0b0bbe811a908374b2907bb38c75ca76127d2
Reviewed-on: https://github.com/flang-compiler/f18/pull/981
David Truby [Fri, 14 Feb 2020 04:46:29 +0000 (04:46 +0000)]
[flang] Add zlib to drone files so that linking LLVM works. (flang-compiler/f18#983)
Original-commit: flang-compiler/f18@
403faf847d0beacac26421bc82318aaef0e973c9
Reviewed-on: https://github.com/flang-compiler/f18/pull/983
Peter Klausler [Thu, 13 Feb 2020 19:08:26 +0000 (11:08 -0800)]
[flang] Merge pull request flang-compiler/f18#982 from flang-compiler/pmk-more-io
Progress on Fortran I/O runtime
Original-commit: flang-compiler/f18@
47ed180b67cae9d61251574e94c97675d5c998b1
Reviewed-on: https://github.com/flang-compiler/f18/pull/982
peter klausler [Wed, 5 Feb 2020 00:55:45 +0000 (16:55 -0800)]
[flang] Progress on Fortran I/O runtime
Use internal units for internal I/O state
Replace use of virtual functions
reference_wrapper
Internal formatted output to array descriptor
Delete dead code
Begin list-directed internal output
Refactorings and renamings for clarity
List-directed external I/O (character)
COMPLEX list-directed output
Control list items
First cut at unformatted I/O
More OPEN statement work; rename class to ExternalFileUnit
Complete OPEN (exc. for POSITION=), add CLOSE()
OPEN(POSITION=)
Flush buffers on crash and for terminal output; clean up
Documentation
Fix backquote in documentation
Fix typo in comment
Begin implementation of input
Refactor binary floating-point properties to a new header, simplify numeric output editing
Dodge spurious GCC 7.2 build warning
Address review comments
Original-commit: flang-compiler/f18@
9c4bba11cf2329575ea9ee446f69e9caa797135c
Reviewed-on: https://github.com/flang-compiler/f18/pull/982
psteinfeld [Tue, 11 Feb 2020 19:32:12 +0000 (11:32 -0800)]
[flang] Merge pull request flang-compiler/f18#978 from flang-compiler/ps-types
Semantic checks for constraints on types
Original-commit: flang-compiler/f18@
2efdf12f6a2533980dfcfc6c3bb375e65ac07a67
Reviewed-on: https://github.com/flang-compiler/f18/pull/978
Pete Steinfeld [Mon, 10 Feb 2020 21:24:32 +0000 (13:24 -0800)]
[flang] Semantic checks for constraints on types
I implemented and added tests for constraints C703, C704, C705, C706,
and C796. In some cases, the code and/or test already existed, and all
I did was add a notation indicating the associated constraint.
Original-commit: flang-compiler/f18@
49a64c4c2374e930f6890b270289a6f49ba63edd
Reviewed-on: https://github.com/flang-compiler/f18/pull/978
psteinfeld [Tue, 11 Feb 2020 19:04:37 +0000 (11:04 -0800)]
[flang] Merge pull request flang-compiler/f18#979 from flang-compiler/ps-dev-story
Updated the description of `evaluate::Expr` types
Original-commit: flang-compiler/f18@
92884fa4f63e5186fc23d185b9d163ac28ff39d5
Reviewed-on: https://github.com/flang-compiler/f18/pull/979
Pete Steinfeld [Mon, 3 Feb 2020 18:31:30 +0000 (10:31 -0800)]
[flang] Updated the description of `evaluate::Expr` types
Original-commit: flang-compiler/f18@
75adddd504577a295f0c906aa049bd47ce2b4f2e
Reviewed-on: https://github.com/flang-compiler/f18/pull/979
Tim Keith [Mon, 10 Feb 2020 19:05:10 +0000 (15:05 -0400)]
[flang] Merge pull request flang-compiler/f18#977 from flang-compiler/tsk-osx-error
Fix compilation error on macOS
Original-commit: flang-compiler/f18@
204c67d7b6721c38d24cb2ffb3d812350f6d146b
Reviewed-on: https://github.com/flang-compiler/f18/pull/977
Tim Keith [Mon, 10 Feb 2020 18:55:24 +0000 (10:55 -0800)]
[flang] Fix compilation error on macOS
The call to `std::min` failed to compile with GCC on macOS due to type
inference because `std::size_t` is `long unsigned int` but `std::int64_t`
is `long long int`.
Original-commit: flang-compiler/f18@
c342575a9e0217fa3252b70b8ef3eac0236a58e3
Reviewed-on: https://github.com/flang-compiler/f18/pull/977
jeanPerier [Mon, 10 Feb 2020 15:59:10 +0000 (07:59 -0800)]
[flang] Merge pull request flang-compiler/f18#972 from flang-compiler/jpr-clang-10-warnings
Fix issues comming from clang-10 warnings
Original-commit: flang-compiler/f18@
90e6448255d9489eeb3081a9fda9d320caf8b3e3
Reviewed-on: https://github.com/flang-compiler/f18/pull/972
Jean Perier [Thu, 6 Feb 2020 11:27:36 +0000 (03:27 -0800)]
[flang] Fix issues comming from clang-10 warnings
- Remove SubprogramDetails copy ctor
- Prevent copies in range based loops over symbols
- Remove unsued var
Original-commit: flang-compiler/f18@
16543d22f74e9421ecb4078818f4c1970bac0a5d
Reviewed-on: https://github.com/flang-compiler/f18/pull/972
psteinfeld [Fri, 7 Feb 2020 18:28:03 +0000 (10:28 -0800)]
[flang] Merge pull request flang-compiler/f18#973 from flang-compiler/ps-c702
Semantic checks for C702
Original-commit: flang-compiler/f18@
351a7d5ea6264cc58a3fd7a20e79442c41f8dd68
Reviewed-on: https://github.com/flang-compiler/f18/pull/973
Pete Steinfeld [Thu, 6 Feb 2020 20:26:51 +0000 (12:26 -0800)]
[flang] Semantic checks for C702
C702 (R701) A colon shall not be used as a type-param-value except in the
declaration of an entity that has the POINTER or ALLOCATABLE attribute.
I added code to the visitor for a TypeDeclarationStmt to check for the
'LEN' type parameter for strings and to loop over the type parameters
for derived types.
I also ran into a few situations where previous tests had erroneously
used a colon for type parameters without either the POINTER or
ALLOCATABLE attribute and fixed them up.
Original-commit: flang-compiler/f18@
a1a95bfcd1811d697f1386fe57af664b8a16ffb5
Reviewed-on: https://github.com/flang-compiler/f18/pull/973
Jinxin (Brian) Yang [Wed, 5 Feb 2020 18:13:43 +0000 (10:13 -0800)]
[flang] [OpenMP] Predetermined rules for loop index variables (flang-compiler/f18#962)
This refers to three rules in OpenMP 4.5 Spec 2.15.1.1:
* The loop iteration variable(s) in the associated do-loop(s) of a do,
parallel do, taskloop, or distribute construct is (are) private.
* The loop iteration variable in the associated do-loop of a simd
construct with just one associated do-loop is linear with a linear-step
that is the increment of the associated do-loop.
* The loop iteration variables in the associated do-loops of a simd
construct with multiple associated do-loops are lastprivate.
A simple example:
```
implicit none
integer :: N = 1024
integer i, j, k
!$omp parallel do collapse(3)
do i=1, N <- i is private
do j=1, N <- j is private
do k=1, N <- k is private
enddo
enddo
enddo
end
```
If `collapse` clause is not present, the associated do-loop for construct
`parallel do` is only `i` loop. With `collapse(n)`, `i`, `j`, and `k` are
all associated do-loops and the loop index variables are private to the
OpenMP construct:
```
implicit none
!DEF: /MainProgram1/n ObjectEntity INTEGER(4)
integer :: n = 1024
!DEF: /MainProgram1/i ObjectEntity INTEGER(4)
!DEF: /MainProgram1/j ObjectEntity INTEGER(4)
!DEF: /MainProgram1/k ObjectEntity INTEGER(4)
integer i, j, k
!$omp parallel do collapse(3)
!DEF: /MainProgram1/Block1/i (OmpPrivate) HostAssoc INTEGER(4)
!REF: /MainProgram1/n
do i=1,n
!DEF: /MainProgram1/Block1/j (OmpPrivate) HostAssoc INTEGER(4)
!REF: /MainProgram1/n
do j=1,n
!DEF: /MainProgram1/Block1/k (OmpPrivate) HostAssoc INTEGER(4)
!REF: /MainProgram1/n
do k=1,n
end do
end do
end do
end program
```
This implementation assumes that the structural checks for do-loops
are done at this point, for example the `n` in `collapse(n)` should
be no more than the number of actual perfectly nested do-loops, etc..
Original-commit: flang-compiler/f18@
572a57d3d0d785bb3f2aad9e890ef498c1214309
Reviewed-on: https://github.com/flang-compiler/f18/pull/962
jeanPerier [Wed, 5 Feb 2020 10:46:52 +0000 (02:46 -0800)]
[flang] Merge pull request flang-compiler/f18#968 from flang-compiler/jpr-fix-clang-template-step-limit
Fix template step limit issue with clang
Original-commit: flang-compiler/f18@
d4cd378290feb05ace2d549fb74db3e48b962f10
Reviewed-on: https://github.com/flang-compiler/f18/pull/968
Jean Perier [Tue, 4 Feb 2020 18:30:16 +0000 (10:30 -0800)]
[flang] Fix template step limit issue with clang
While working on PR 959, I instanciated a `common::TupleToVariant`
with ~50+ types inside the tuple. Clang would then crash after
1hr compilation with message:
"constexpr evaluation hit maximum step limit; possible infinite loop"
After investigating, it turned out clang handles very badly the way
`common::AreTypesDistinctHelper` was implemented.
Its "number of steps" was exponential with the number of types.
This fix makes this number quadratic which solves the issue.
Original-commit: flang-compiler/f18@
4542cb57082eaf578799c76482d4b706ae5da077
Reviewed-on: https://github.com/flang-compiler/f18/pull/968
Peter Klausler [Tue, 4 Feb 2020 22:47:02 +0000 (14:47 -0800)]
[flang] Merge pull request flang-compiler/f18#950 from flang-compiler/pmk-frame
Formatted output editing & initial buffer framing code
Original-commit: flang-compiler/f18@
003b664229a91b1692b52014ef6f9c9b65119b0d
Reviewed-on: https://github.com/flang-compiler/f18/pull/950
peter klausler [Fri, 24 Jan 2020 00:59:27 +0000 (16:59 -0800)]
[flang] Initial buffer framing code
Address review comments
Integer output data editing (I,B,O,Z)
Full integer output formatting
Stub out some work in progress
Progress on E output data editing
E, D, EN, and ES output editing done
Fw.d output editing
Real G output editing
G output editing for reals
Make environment a distinct module
CHARACTER and LOGICAL output editing
Minimal decimal representations for E0, F0, G0 editing
Move real output editing code into its own file
Fix/dodge some GCC build problems
Prep work for external I/O statement state
External HELLO, WORLD
Fix build problem with GCC
Add virtual destructors where needed
Add new test
Original-commit: flang-compiler/f18@
c3f1774f8eee903928b7e46636edfb03425eabc0
Reviewed-on: https://github.com/flang-compiler/f18/pull/950
psteinfeld [Mon, 3 Feb 2020 17:28:49 +0000 (09:28 -0800)]
[flang] Merge pull request flang-compiler/f18#939 from flang-compiler/ps-dev-story
Explanation of how to implement a semantic check
Original-commit: flang-compiler/f18@
bedca1462b46c52cf41b5f40cd7ed9bb6cc78f29
Reviewed-on: https://github.com/flang-compiler/f18/pull/939
Pete Steinfeld [Thu, 16 Jan 2020 00:25:26 +0000 (16:25 -0800)]
[flang] Explanation of how to implement a semantic check
This is the story of implementing semantic checks for passing DO
variables to functions with dummy arguments with INTENT(OUT) or
INTENT(INOUT).
Original-commit: flang-compiler/f18@
889f90913f280f285eb9960a0e0baadfd43a555f
Reviewed-on: https://github.com/flang-compiler/f18/pull/939
Tim Keith [Thu, 30 Jan 2020 00:17:41 +0000 (16:17 -0800)]
[flang] Merge pull request flang-compiler/f18#961 from flang-compiler/tsk-contig2
Fix another bug checking simple contiguity
Original-commit: flang-compiler/f18@
cd371e9a2ab66c31c6df77c0fa3052a80f00908c
Reviewed-on: https://github.com/flang-compiler/f18/pull/961
Tim Keith [Tue, 28 Jan 2020 23:06:03 +0000 (15:06 -0800)]
[flang] Fix another bug checking simple contiguity
The test still wasn't correct for structure components. If the last
part-ref is a non-array or a single array element, but the whole
ArrayRef has non-zero rank, it is not contiguous. Otherwise, if there
are subscripts on the last part-ref they can be checked normally.
Add some tests for cases that were previously failing, and also for
cases with vector subscripts.
Original-commit: flang-compiler/f18@
aa0a0887325bd1fc6c3a1ad40fc6711d2e458a1c
Reviewed-on: https://github.com/flang-compiler/f18/pull/961
psteinfeld [Wed, 29 Jan 2020 21:19:22 +0000 (13:19 -0800)]
[flang] Merge pull request flang-compiler/f18#954 from flang-compiler/ps-impure-final
Semantic checks for deallocating entities with IMPURE FINAL procedures
Original-commit: flang-compiler/f18@
61da1f9e5c59cedb02026954a73ab30d8319a66c
Reviewed-on: https://github.com/flang-compiler/f18/pull/954
Pete Steinfeld [Mon, 27 Jan 2020 22:12:35 +0000 (14:12 -0800)]
[flang] Semantic checks for deallocating entities with IMPURE FINAL procedures
You cannot call an IMPURE procedure in a DO CONCURRENT construct. One
way that can happen is if an entity with an IMPURE FINAL procedure gets
deallocated. Similar to the checks for deallocating coarrays, there are
three ways that an entity can get deallocated that are applicable to DO
CONCURRENT constructs -- an actual DEALLOCATE statement, block exit, and
assignment.
This change depends on the utility function `HasImpureFinal()` in tools.h to
determine if an entity has a derived type with an IMPURE FINAL
procedure. In the course of testing this change, I realized that this
check is incorrect, but the code specific to DO CONCURRENT is
independent of the check, so I might as well implement it.
Original-commit: flang-compiler/f18@
d2294ff511aebd64889df57d02325bd6fcdf914a
Reviewed-on: https://github.com/flang-compiler/f18/pull/954
Jinxin (Brian) Yang [Tue, 28 Jan 2020 22:12:14 +0000 (14:12 -0800)]
[flang] Merge pull request flang-compiler/f18#960 from flang-compiler/by-remove-default
Remove `default` case for OmpSectionsDirective (only two enum values)
Original-commit: flang-compiler/f18@
d98bf8494e2e017ed9a7e1d3c93688c379c01bf3
Reviewed-on: https://github.com/flang-compiler/f18/pull/960
Jinxin Yang [Tue, 28 Jan 2020 21:58:14 +0000 (13:58 -0800)]
[flang] Remove `default` case for OmpSectionsDirective (only two enum values)
Original-commit: flang-compiler/f18@
3f37e0dbaf32f1127553be2149915cab1b93cdcf
Reviewed-on: https://github.com/flang-compiler/f18/pull/960
Jinxin (Brian) Yang [Tue, 28 Jan 2020 20:51:35 +0000 (12:51 -0800)]
[flang] [OpenMP] Name Resolution for OpenMP constructs (flang-compiler/f18#940)
This is an extended framework based on the previous work that addresses
the NR on OpenMP directives/clauses (b2ea520). In this change:
* New `OmpVisitor` is created (ResolveNamesVisitor derives from it) to
create necessary scopes for certain OpenMP constructs. This is along
with the regular Fortran NR process.
* Old `OmpVisitor` is adjusted and converted to a standalone visitor--
`OmpAttributeVisitor`. This is used to walk through the OpenMP constructs
and do the NR for variables on the OpenMP directives or data references
within the OpenMP constructs. "Do the NR" here means that based on the NR
results of the regular Fortran NR, fix the symbols of `Names` related
to the OpenMP constructs. Note that there is an `OmpContext` in this
visitor (similar to the one in `OmpStructureChecker`), this is necessary
when dealing with the nested OpenMP constructs in the future.
Given an OpenMP code:
```
real*8 a, b
a = 1.
b = 2.
!$omp parallel private(a)
a = 3.
b = 4.
!$omp end parallel
print *, a, b
end
```
w/o -fopenmp:
```
real*8 a, b
!REF: /MainProgram1/a
a = 1.
!REF: /MainProgram1/b
b = 2.
!!!! OMP parallel
!REF: /MainProgram1/a
a = 3.
!REF: /MainProgram1/b
b = 4.
!!!! OMP end parallel
!REF: /MainProgram1/a
!REF: /MainProgram1/b
print *, a, b
end
```
w/ -fopenmp:
```
real*8 a, b
!REF: /MainProgram1/a
a = 1.
!REF: /MainProgram1/b
b = 2.
!$omp parallel private(a) <-- new Symbol for 'a' created
!DEF: /MainProgram1/Block1/a (OmpPrivate) HostAssoc REAL(8)
a = 3. <-- fix the old symbol with new Symbol in parallel scope
!REF: /MainProgram1/b
b = 4. <-- do nothing because by default it is shared in this scope
!$omp end parallel
!REF: /MainProgram1/a
!REF: /MainProgram1/b
print *, a, b
end
```
Please note that this is a framework update, there are still many
things on the TODO list for finishing the NR for OpenMP (based on
the `OpenMP-semantics.md` design doc), which will be on top of this
framework.
Some TODO items:
- Create a generic function to go through all the rules for deciding
`predetermined`, `explicitly determined`, and `implicitly determined`
data-sharing attributes. (This is the next biggest part)
- Handle `Array Sections` and `Array or Structure Element`.
- Take association into consideration for example Pointer association,
`ASSOCIATE` construct, and etc.
- Handle all the name resolution for directives/clauses that have
`parser::Name`.
* N.B. Extend `AddSourceRange` to apply to current and parent scopes
- motivated by a few cases that need to call `AddSourceRange`
for current & parent scopes; the extension should be safe
- global scope is not included
Original-commit: flang-compiler/f18@
0c3c39d30e3f166a6a1303337c5fd7eead720fd0
Reviewed-on: https://github.com/flang-compiler/f18/pull/940
psteinfeld [Tue, 28 Jan 2020 04:18:52 +0000 (20:18 -0800)]
[flang] Merge pull request flang-compiler/f18#956 from flang-compiler/ps-checklist
More checklist items
Original-commit: flang-compiler/f18@
32eb0d79c3a334d15ed1dc351619be9fda6b2a9f
Reviewed-on: https://github.com/flang-compiler/f18/pull/956
Pete Steinfeld [Fri, 24 Jan 2020 20:08:24 +0000 (12:08 -0800)]
[flang] More checklist items
I added more items when reviewing some actual pull request comments.
Original-commit: flang-compiler/f18@
195d807ff221e4247ec5609e8e816e81dab5df94
Reviewed-on: https://github.com/flang-compiler/f18/pull/956
Alexis Perry [Tue, 28 Jan 2020 02:18:45 +0000 (19:18 -0700)]
[flang] Changed *.cc file extension to *.cpp (updated scripts) (flang-compiler/f18#958)
Updated CMake files accordingly, using better regex
Updated license headers to match new extension and fit within 80 columns
Updated other comments within files that referred to the old extension
Original-commit: flang-compiler/f18@
ae7721e611918631d1e3821dbb60f5ffcd9a69b1
Reviewed-on: https://github.com/flang-compiler/f18/pull/958
David Truby [Mon, 27 Jan 2020 20:57:59 +0000 (20:57 +0000)]
[flang] Moved public headers to include/flang (flang-compiler/f18#943)
Original-commit: flang-compiler/f18@
21adbc7e05b2454ba3fc725b4697748f98599471
Reviewed-on: https://github.com/flang-compiler/f18/pull/943
Tim Keith [Mon, 27 Jan 2020 19:53:53 +0000 (11:53 -0800)]
[flang] Merge pull request flang-compiler/f18#951 from flang-compiler/tsk-impure
Fix bugs detecting impure calls
Original-commit: flang-compiler/f18@
db5ebec5156f3f93fb99358192307298c99fc3c4
Reviewed-on: https://github.com/flang-compiler/f18/pull/951
Tim Keith [Sat, 25 Jan 2020 16:15:17 +0000 (08:15 -0800)]
[flang] Fix bugs detecting impure calls
Change Traverse to visit the actual arguments of structure constructors.
Change FindImpureCallHelper to visit the actual arguments of a call to a
pure procedure in case one of them makes a call to an impure function.
Original-commit: flang-compiler/f18@
81a5488ee62b4324d002c348464712c930095a32
Reviewed-on: https://github.com/flang-compiler/f18/pull/951
Tim Keith [Mon, 27 Jan 2020 19:53:31 +0000 (11:53 -0800)]
[flang] Merge pull request flang-compiler/f18#952 from flang-compiler/tsk-contig
Fix bug detecting simply contiguous component
Original-commit: flang-compiler/f18@
a8a7a8c914aecbfdaff95419eb0408aa979abe53
Reviewed-on: https://github.com/flang-compiler/f18/pull/952
Tim Keith [Sun, 26 Jan 2020 18:42:34 +0000 (10:42 -0800)]
[flang] Fix bug detecting simply contiguous component
We were always return false when testing a component for simple
contiguity. Change to check that the component is an array that is
simply continguous. Also treat a scalar component of scalar as simply
contiguous.
A pointer with bounds remapping to a complex part is a similar case
so add a test for that too.
Original-commit: flang-compiler/f18@
27d76da2a44614b2c4cf4d576410372cabf66577
Reviewed-on: https://github.com/flang-compiler/f18/pull/952
Peter Klausler [Mon, 27 Jan 2020 18:01:32 +0000 (10:01 -0800)]
[flang] Merge pull request flang-compiler/f18#949 from flang-compiler/pmk-file
OpenFile class: API and implementation wrappers for open external files
Original-commit: flang-compiler/f18@
edd60ae8281ab21588355c4f93680b6152219cd0
Reviewed-on: https://github.com/flang-compiler/f18/pull/949
peter klausler [Fri, 24 Jan 2020 00:10:00 +0000 (16:10 -0800)]
[flang] Basic file operation wrapper
Asynchronous interfaces and locking
Original-commit: flang-compiler/f18@
3ba77a0c2035644485737a025cc8912485b56225
Reviewed-on: https://github.com/flang-compiler/f18/pull/949
Peter Klausler [Fri, 24 Jan 2020 20:35:43 +0000 (12:35 -0800)]
[flang] Merge pull request flang-compiler/f18#946 from flang-compiler/pmk-hello
12HHELLO, WORLD
Original-commit: flang-compiler/f18@
3087aa82840b817cb7433c48cc2310accf9dc9b6
Reviewed-on: https://github.com/flang-compiler/f18/pull/946
peter klausler [Thu, 16 Jan 2020 21:51:25 +0000 (13:51 -0800)]
[flang] Drill down to a working implementation of the APIs for an
internal formatted WRITE with no data list items.
Improve argument names in io-api.h
Bump up error number to not conflict with errno values
Use Fortran::runtime::io namespace
Add wrapper around malloc/free, allow use of unique_ptr with wrapper
IoErrorHandler
Revamp FormatContext, use virtual member functions
Update comment syntax, allow for old C
12HHELLO, WORLD
Remove files not yet ready for review
Use std::forward
Fix gcc build warnings
Fix redundant filename in license boilerplate
Reduce runtime dependence on compiler binary libraries, fixing shared lib builds
Original-commit: flang-compiler/f18@
839a91f1d699cd839767407bcdb1e384f2d2b730
Reviewed-on: https://github.com/flang-compiler/f18/pull/946
Tim Keith [Wed, 22 Jan 2020 21:50:42 +0000 (13:50 -0800)]
[flang] Merge pull request flang-compiler/f18#944 from flang-compiler/tsk-pointer
Check bounds on pointer assignment
Original-commit: flang-compiler/f18@
5e331c1a5cdbfa80c4ef736e95dc0a88b34c6d01
Reviewed-on: https://github.com/flang-compiler/f18/pull/944
Tim Keith [Wed, 22 Jan 2020 01:15:21 +0000 (17:15 -0800)]
[flang] Check bounds on pointer assignment
Perform checks on bounds-spec and bounds-remapping in a pointer
assignment statement:
- check that the rank of the bounds specified matches the rank of the
pointer
- for bounds-spec, check that the pointer rank matches the target rank
- for bounds-remapping:
- check that the target is rank 1 or simply contiguous
- check that there are sufficient elements on the RHS for the bounds
specified, when it can be determined at compile time
Move more of the pointer-specific checking from `assignment.cc`
to `pointer-assignment.cc`.
Original-commit: flang-compiler/f18@
7489b3539224f8ad7a55873916e5854510236218
Reviewed-on: https://github.com/flang-compiler/f18/pull/944
Tim Keith [Thu, 16 Jan 2020 20:43:48 +0000 (12:43 -0800)]
[flang] Refactor Analyze(PointerAssignmentStmt)
Use early returns to reduce the indentation.
Check LHS is a pointer as early as possible.
A PointerAssignmentStmt can only have a typedAssignment that
represents a PointerAssignment. So assert that is the case and
don't worry about the other cases.
Original-commit: flang-compiler/f18@
bdf3d3a292b5f9ce4241e3d63b759bd61838cf18
Reviewed-on: https://github.com/flang-compiler/f18/pull/944
Tree-same-pre-rewrite: false
Tim Keith [Wed, 15 Jan 2020 01:39:29 +0000 (17:39 -0800)]
[flang] Make GenericAssignmentWrapper more like GenericExprWrapper
Have it wrap an optional Assignment so that we can distinguish between
unanalyzed and analyzed with error.
Change analysis of PointerAssignmentStmt to proceed with bounds even
if the DataRef or Expr has an error. Otherwise any bounds expressions
won't be analyzed in that case.
In GetExpr() and GetAssignment() if we get an internal error due to an
unanalyzed expression, dump the parse tree for the expression so we have
some context for the error. They should only be called after the
expression analysis phase. At that point, every expression and assignment
should be analyzed, though some may have resulted in errors(indicated by
returning `nullptr`).
Original-commit: flang-compiler/f18@
3b865d7703f53099cd491ed1aa9b80b46fee9f58
Reviewed-on: https://github.com/flang-compiler/f18/pull/944
Tree-same-pre-rewrite: false
Tim Keith [Wed, 15 Jan 2020 01:31:25 +0000 (17:31 -0800)]
[flang] Add `std::string ExpressionBase::AsFortran()`
This is easier to use when including an expression in an error message
and also useful when debugging for dumping expressions.
Fix up several places that no longer need to use a temporary
std::stringstream.
Also change some references to `operator<<` in `formatting.cc` and
`symbol.cc` that became ambiguous with this change.
Original-commit: flang-compiler/f18@
25dc49b6e9cf5bce61d6d655ab242609cbd28e13
Reviewed-on: https://github.com/flang-compiler/f18/pull/944
Tree-same-pre-rewrite: false
psteinfeld [Wed, 22 Jan 2020 17:43:44 +0000 (09:43 -0800)]
[flang] Merge pull request flang-compiler/f18#936 from flang-compiler/ps-checklist
Checklist to precede pull requests
Original-commit: flang-compiler/f18@
b1e67c4a40d8cdd0a8f7429ad1780e25798e0136
Reviewed-on: https://github.com/flang-compiler/f18/pull/936
Pete Steinfeld [Sun, 12 Jan 2020 19:24:13 +0000 (11:24 -0800)]
[flang] Checklist to precede pull requests
I added a checklist to the C++ Style document for things to check before
submitting a pull request or when responding to a request for comments
on a pull request.
Original-commit: flang-compiler/f18@
903420268a5aabbab9acdf8788b4344c395ee597
Reviewed-on: https://github.com/flang-compiler/f18/pull/936
Peter Klausler [Wed, 15 Jan 2020 23:58:00 +0000 (15:58 -0800)]
[flang] Merge pull request flang-compiler/f18#938 from flang-compiler/pmk-fix-rank
Fix shape analysis of RHS designators of pointer assignments
Original-commit: flang-compiler/f18@
0423347d69e4422e080a59dfec00c850bf1ddcc2
Reviewed-on: https://github.com/flang-compiler/f18/pull/938
peter klausler [Wed, 15 Jan 2020 22:11:48 +0000 (14:11 -0800)]
[flang] Fix shape analysis of RHS designators of pointer assignments
Original-commit: flang-compiler/f18@
bf26a36ef4255188b294a73bdc138dfba52cf5d3
Reviewed-on: https://github.com/flang-compiler/f18/pull/938
Tim Keith [Wed, 15 Jan 2020 23:01:01 +0000 (15:01 -0800)]
[flang] Merge pull request flang-compiler/f18#937 from flang-compiler/tsk-pointer
Fix checking of pointer target with association
Original-commit: flang-compiler/f18@
6b3dc6d5ece54c2d051bec5bf01c0c7c8532819f
Reviewed-on: https://github.com/flang-compiler/f18/pull/937
Tim Keith [Wed, 15 Jan 2020 21:43:05 +0000 (13:43 -0800)]
[flang] Fix checking of pointer target with association
When checking if the target of a pointer assignment is valid, we
weren't following associations. E.g. we complained about the assignment
below if `b` had the TARGET attribute but `c` did not:
```
associate(a => b%c)
p => a
end associate
```
The fix is to change `GetSymbolVector()` to follow associations in
creating the chain of symbols from a designator.
Add tests for this, and also some other cases where TARGET is on the
derived type variable rather than the component (which worked but didn't
have tests).
Original-commit: flang-compiler/f18@
c81c6baedd41d6ca2d36c81ca745a144c02be369
Reviewed-on: https://github.com/flang-compiler/f18/pull/937
Peter Klausler [Wed, 15 Jan 2020 22:08:24 +0000 (14:08 -0800)]
[flang] Merge pull request flang-compiler/f18#927 from flang-compiler/pmk-format
Runtime FORMAT scanning
Original-commit: flang-compiler/f18@
538d4a1dea9d2301fe36b13d1b248fde5c010f83
Reviewed-on: https://github.com/flang-compiler/f18/pull/927
peter klausler [Thu, 9 Jan 2020 16:10:57 +0000 (08:10 -0800)]
[flang] begin processing format strings
Move RoundingMode to Fortran.h
Always skip blanks outside character literals & Hollerith
Templatize
optimize repeat counts somewhat
Fix license punctuation, remove patch
Original-commit: flang-compiler/f18@
4a0d39b0398974ade4367a5a96e11a90e853c18c
Reviewed-on: https://github.com/flang-compiler/f18/pull/927
Peter Klausler [Wed, 15 Jan 2020 19:14:53 +0000 (11:14 -0800)]
[flang] Merge pull request flang-compiler/f18#926 from flang-compiler/pmk-bd
BLOCK DATA semantics
Original-commit: flang-compiler/f18@
4954b95527a48d5242731c91a7181a001bf64283
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
peter klausler [Wed, 15 Jan 2020 00:16:32 +0000 (16:16 -0800)]
[flang] Comments
Original-commit: flang-compiler/f18@
0c12188e8437abf820381fea787c625eda7e2d1f
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
peter klausler [Tue, 14 Jan 2020 23:59:29 +0000 (15:59 -0800)]
[flang] Better EQUIVALENCE handling
Original-commit: flang-compiler/f18@
7c55097e81c9ab76953c1c652128bc9b969e6a33
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Tue, 14 Jan 2020 23:08:37 +0000 (15:08 -0800)]
[flang] Better fix; clean up redundant utilities
Original-commit: flang-compiler/f18@
531db4932155f53f14805b8a6617e31803ab6435
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Tue, 14 Jan 2020 22:19:42 +0000 (14:19 -0800)]
[flang] Fix unrelated build error found in testing
Original-commit: flang-compiler/f18@
5a00d77827feda979f2b11a33a22b7c7b05e824a
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Tue, 14 Jan 2020 19:38:09 +0000 (11:38 -0800)]
[flang] Update a test
Original-commit: flang-compiler/f18@
5f32183eed19560a57a68ae9fd0eec72d18c7a40
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Tue, 14 Jan 2020 19:24:49 +0000 (11:24 -0800)]
[flang] Address review comments
Original-commit: flang-compiler/f18@
d179c796bd7271916c52d8478e60a88bff809564
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Tue, 14 Jan 2020 19:11:15 +0000 (11:11 -0800)]
[flang] Better check for variables in DATA
Original-commit: flang-compiler/f18@
92e20baaa89fd20cd724bb4414e84670843cc442
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Mon, 13 Jan 2020 23:39:18 +0000 (15:39 -0800)]
[flang] Fix bug
Original-commit: flang-compiler/f18@
662b8139b5d17b39222b2d297114606e86fa83d7
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Mon, 13 Jan 2020 23:13:09 +0000 (15:13 -0800)]
[flang] More comments addressed
Original-commit: flang-compiler/f18@
9c863a572b39beca7f1f3e86edb239e6d3b72d4f
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Mon, 13 Jan 2020 22:30:31 +0000 (14:30 -0800)]
[flang] Address review comments
Original-commit: flang-compiler/f18@
59e5565cb87eebd2c4f44defd22484ca83777942
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
peter klausler [Fri, 10 Jan 2020 01:12:46 +0000 (17:12 -0800)]
[flang] BLOCK DATA
add test
Original-commit: flang-compiler/f18@
91c084b698b0617da5d7592a5b1830adc5c5d84e
Reviewed-on: https://github.com/flang-compiler/f18/pull/926
Tree-same-pre-rewrite: false
Tim Keith [Tue, 14 Jan 2020 21:09:08 +0000 (13:09 -0800)]
[flang] Merge pull request flang-compiler/f18#928 from flang-compiler/tsk-assignment3
Pointer assignment semantic checks
Original-commit: flang-compiler/f18@
fc600af81e1a5c75d4f619bed3feb6194117b54d
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tim Keith [Tue, 14 Jan 2020 00:39:00 +0000 (16:39 -0800)]
[flang] Pointer assignment semantic checks
Call `CheckPointerAssignment()` when analyzing a pointer assignment
statement. NOTE: the cases with bounds-spec and bounds-remapping are
still to be done.
Perform checks on pointer symbols in `check-declarations.cc`.
Check for pointer to generic intrinsic in `semantics/expression.cc`.
Add the other required pointer assignment checks to `pointer-assignment.cc`.
Original-commit: flang-compiler/f18@
3dc5fd6d9e58d1ef0efd1deefcbaa52499ad93f9
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tim Keith [Mon, 13 Jan 2020 23:41:23 +0000 (15:41 -0800)]
[flang] C1027: procedure pointer may not be coindexed object
Original-commit: flang-compiler/f18@
4261daf352edefabee5c97f0ed0da09280240a86
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tree-same-pre-rewrite: false
Tim Keith [Mon, 6 Jan 2020 23:56:32 +0000 (15:56 -0800)]
[flang] Add IntrinsicProcTable::IsSpecificIntrinsicFunction
This replaces IsUnrestrictedSpecificIntrinsicFunction and returns
information that allows the caller to distinguish between restricted
and unrestricted intrinsics.
The new case in `resolve46.f90` used to get an internal error.
Original-commit: flang-compiler/f18@
4cb1ee10b90bbc5e3c4899ab136fad4d1e841195
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tree-same-pre-rewrite: false
Tim Keith [Mon, 6 Jan 2020 22:04:17 +0000 (14:04 -0800)]
[flang] Make Fortran form of intrinsic types uppercase
`DynamicType::AsFortran` was using mixed case for intrinic type names.
Make it upper case for consistency with TYPE(...) and CHARACTER when a
length is present and other error messages.
Original-commit: flang-compiler/f18@
e16909d67f16425b267511e5fe33f2ff72f69ee9
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tree-same-pre-rewrite: false
Tim Keith [Mon, 6 Jan 2020 17:16:18 +0000 (09:16 -0800)]
[flang] Move pointer assignment checking to its own file
Create `pointer-assignment.{h,cc}` for pointer assignment checking.
It doesn't share with assignment checking so it should be its own file.
Move the code into semantics namespace.
Original-commit: flang-compiler/f18@
1658aba81f24fe3913298e76ae8b9c938bd4d248
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tree-same-pre-rewrite: false
Tim Keith [Sat, 4 Jan 2020 20:38:35 +0000 (12:38 -0800)]
[flang] Clean up AssignmentContext
Eliminate `at_` and use location from `SemanticsContext` instead.
Add and use Analyze functions for `std::optional` and `std::list`.
Original-commit: flang-compiler/f18@
e171029ccdb9efe874cad3a3d91adcfa200a6550
Reviewed-on: https://github.com/flang-compiler/f18/pull/928
Tree-same-pre-rewrite: false
Tim Keith [Tue, 14 Jan 2020 21:06:06 +0000 (13:06 -0800)]
[flang] Merge pull request flang-compiler/f18#933 from flang-compiler/tsk-issues
Move checks for valid array-spec to check-declarations.cc
Original-commit: flang-compiler/f18@
7cf6f6137d93a6faca40a835cdabaecebe02d219
Reviewed-on: https://github.com/flang-compiler/f18/pull/933
Tim Keith [Tue, 14 Jan 2020 20:06:52 +0000 (12:06 -0800)]
[flang] Move checks for valid array-spec to check-declarations.cc
At the time we finish processing an array-spec in `resolve-names.cc`,
we don't know if the entity is going to be declared ALLOCATABLE later
so we can't check for validity there. In the new test in `resolve58.f90`
(based on issue flang-compiler/f18#930) we were reporting an error on `b` and not on `a`
when it should be the reverse.
The fix is to move array-spec checking to `check-declarations.cc`,
after name resolution is complete.
Fixes flang-compiler/f18#930.
Original-commit: flang-compiler/f18@
c596d2fef7628236676c1939659f4eb956e4df35
Reviewed-on: https://github.com/flang-compiler/f18/pull/933
Peter Klausler [Tue, 14 Jan 2020 19:37:20 +0000 (11:37 -0800)]
[flang] Merge pull request flang-compiler/f18#932 from flang-compiler/pmk-fix-931
Fix bug flang-compiler/f18#931: spurious error reported on CSHIFT
Original-commit: flang-compiler/f18@
6adae0b7f4196e54b874c4d0aca93c5cb2d01bd7
Reviewed-on: https://github.com/flang-compiler/f18/pull/932
peter klausler [Tue, 14 Jan 2020 18:53:36 +0000 (10:53 -0800)]
[flang] Fix bug flang-compiler/f18#931: spurious error reported on CSHIFT
Original-commit: flang-compiler/f18@
bd9bd788652975ac11a24fd5d10197be80c78603
Reviewed-on: https://github.com/flang-compiler/f18/pull/932
CarolineConcatto [Tue, 14 Jan 2020 16:20:49 +0000 (16:20 +0000)]
[flang] Regression tests configuration for f18 repository (flang-compiler/f18#861)
The configuration for the tests are in lit.* files.
The lit tests rely on the presence of llvm-lit,FileCheck, not and count.
When building LLVM add:
-DLLVM_INSTALL_UTILS=On at the cmake command.
LLVM_LIT is found by setting LLVM_EXTERNAL_LIT in f18 CMakeLists.txt.
This patch:
* Uses LLVM_EXTERNAL_LIT
* Adds regression tests configurations
* Adds a proof of concept regression test
The regression test needs to have the Utils build in LLVM.
This is done by adding:
-DLLVM_INSTALL_UTILS=On
to the LLVM build cmake.
Signed-off-by: Caroline Concatto <caroline.concatto@arm.com>
Original-commit: flang-compiler/f18@
a58c6067a1ab5cd02dfb5b6fb9919a20b960d984
Reviewed-on: https://github.com/flang-compiler/f18/pull/861
David Truby [Tue, 14 Jan 2020 06:08:56 +0000 (06:08 +0000)]
[flang] Outline operator<< for CharBlock. (flang-compiler/f18#916)
This fixes an issue where the Dump function definitions in dump.cc
were relying on the forward declaration of operator<< for CharBlock
which was marked inline and only present in char-block.h.
This is not allowed under section 6.2.10 of the C++17 standard, and
caused a compilation failure when building with clang 9 as this was
inlining every use of the function and therefore not generating an
outlined definition for linking.
Original-commit: flang-compiler/f18@
3ad75d123b666a5081540f2afedbedde930b2518
Reviewed-on: https://github.com/flang-compiler/f18/pull/916
psteinfeld [Sun, 12 Jan 2020 17:08:17 +0000 (09:08 -0800)]
[flang] Merge pull request flang-compiler/f18#924 from flang-compiler/ps-cleanup-do-check
Removed an unnecessary check after Tim fixed issue flang-compiler/f18#915.
Original-commit: flang-compiler/f18@
538a6dd5e27e3a159b84cd167f46bbbf656c8cfe
Reviewed-on: https://github.com/flang-compiler/f18/pull/924
Pete Steinfeld [Sun, 12 Jan 2020 16:31:54 +0000 (08:31 -0800)]
[flang] Removed an unnecessary check after Tim fixed issue flang-compiler/f18#915.
Original-commit: flang-compiler/f18@
348b04bc1c313d5d18ebb133441967547d4c7d6d
Reviewed-on: https://github.com/flang-compiler/f18/pull/924