Tim Keith [Mon, 16 Dec 2019 22:28:23 +0000 (14:28 -0800)]
[flang] Add evaluate::GetDerivedTypeSpec(DynamicType)
It gets the semantics::DerivedTypeSpec of a DynamicType if it has one.
Make use of it where it simplifies the code.
Original-commit: flang-compiler/f18@
9ad12e7c131459a8beab2b9ffa204966a85f405a
Reviewed-on: https://github.com/flang-compiler/f18/pull/872
Tim Keith [Sat, 14 Dec 2019 00:22:48 +0000 (16:22 -0800)]
[flang] C774: Defined operator/assignment may not have NOPASS
Original-commit: flang-compiler/f18@
6bfa3d3568b6dc373d62d691db2fd5e8859fff47
Reviewed-on: https://github.com/flang-compiler/f18/pull/872
Tree-same-pre-rewrite: false
Tim Keith [Mon, 16 Dec 2019 19:33:55 +0000 (11:33 -0800)]
[flang] Support for type-bound operators and assignment
Add `ArgumentAnalyzer::FindBoundOp` to look for an operator or
assignment definition in the type of each operand. Then `TryBoundOp`
checks if it is actually applicable.
Change ResolveGeneric to handle type-bound operators: the `adjustActuals`
function passed in handles the difference between these and normal
type-bound procedures. For operators, either operand may be the passed-
object argument. For procedures we know which one it is.
Extract `GetDerivedTypeSpec`, `GetBindingResolution`, and
`OkLogicalIntegerAssignment` into separate functions to simplify the
logic of the calling functions.
Original-commit: flang-compiler/f18@
1f7ff22145ef61c4c168c466f4de4fab11e0f611
Reviewed-on: https://github.com/flang-compiler/f18/pull/872
Tree-same-pre-rewrite: false
Peter Klausler [Mon, 16 Dec 2019 20:54:55 +0000 (12:54 -0800)]
[flang] Merge pull request flang-compiler/f18#871 from flang-compiler/pmk-fixes
Fix remaining failures in expression semantics
Original-commit: flang-compiler/f18@
7473f0bcd76a055fffea9d3f47567a64fceb5ccf
Reviewed-on: https://github.com/flang-compiler/f18/pull/871
peter klausler [Wed, 11 Dec 2019 23:06:24 +0000 (15:06 -0800)]
[flang] Apply implicit typing to names in COMMON that appear in specification expressions
Extend semantic analysis of expressions to catch missing cases
Fix statement function semantics, add degree trig intrinsics
Add GetUltimate to rewrite of bare namelist
Address review comments
Original-commit: flang-compiler/f18@
52ff319de2e750733660d8e7e938e09159a3c11c
Reviewed-on: https://github.com/flang-compiler/f18/pull/871
Eric Schweitz [Mon, 16 Dec 2019 16:39:17 +0000 (08:39 -0800)]
[flang] Merge pull request flang-compiler/f18#869 from schweitzpgi/master
remove stale optimizer files
Original-commit: flang-compiler/f18@
6a8dec4991ecb219f0d42a865d799c93e675612f
Reviewed-on: https://github.com/flang-compiler/f18/pull/869
Eric Schweitz [Fri, 13 Dec 2019 22:46:20 +0000 (14:46 -0800)]
[flang] remove stale optimizer files
Original-commit: flang-compiler/f18@
c497c135f6f277f2dee0c1c3c82319577448438c
Reviewed-on: https://github.com/flang-compiler/f18/pull/869
Eric Schweitz [Thu, 12 Dec 2019 00:47:06 +0000 (16:47 -0800)]
[flang] Merge pull request flang-compiler/f18#868 from schweitzpgi/remove-flatten
remove some old files
Original-commit: flang-compiler/f18@
3d05d39e3636fecab2bc1b7540cec9d672f72944
Reviewed-on: https://github.com/flang-compiler/f18/pull/868
Eric Schweitz [Wed, 11 Dec 2019 21:33:02 +0000 (13:33 -0800)]
[flang] remove some old files
Original-commit: flang-compiler/f18@
d7554c7605079c8a2f8d3d2d6d584241d3112ecd
Reviewed-on: https://github.com/flang-compiler/f18/pull/868
Gary Klimowicz [Wed, 11 Dec 2019 19:13:48 +0000 (11:13 -0800)]
[flang] Flang relicense: LICENSE file and one change (flang-compiler/f18#867)
Add new license text to runtime/magic-numbers.h, which is unusual
in that it is the only .h file in flang that is intended to be
included in either C or Fortran files. This requires special
handling of the license text.
Original-commit: flang-compiler/f18@
61bb9db531ad4fbe8fda9978a6b7754cb86323c2
Reviewed-on: https://github.com/flang-compiler/f18/pull/867
Kiran Kumar T P [Wed, 11 Dec 2019 17:11:59 +0000 (22:41 +0530)]
[flang] Updated call10.f90 with more test for flang-compiler/f18#794-Check for PURE procedures containing image control statements (flang-compiler/f18#857)
Original-commit: flang-compiler/f18@
ae4868e572c90e0ec2c618f4235c9de1ea8cade5
Reviewed-on: https://github.com/flang-compiler/f18/pull/857
jeanPerier [Wed, 11 Dec 2019 07:52:48 +0000 (23:52 -0800)]
[flang] Merge pull request flang-compiler/f18#865 from flang-compiler/jpr-fix-cplx-power
Fix INTGER**COMPLEX regression introduced by PR 858
Original-commit: flang-compiler/f18@
53545d7436c452e2329615326ab95799083dbcd3
Reviewed-on: https://github.com/flang-compiler/f18/pull/865
Jean Perier [Tue, 10 Dec 2019 09:21:50 +0000 (01:21 -0800)]
[flang] Fix INTGER**COMPLEX regression introduced by PR 858
Fix bad copy past that had introduced an unitialized value use.
Original-commit: flang-compiler/f18@
9a84bcb9ac3a06800e9c0f0941a6a82d8416a9fe
Reviewed-on: https://github.com/flang-compiler/f18/pull/865
arjunsuresh1987 [Tue, 10 Dec 2019 22:07:56 +0000 (03:37 +0530)]
[flang] Fix file path in cmake (flang-compiler/f18#844)
Original-commit: flang-compiler/f18@
4771f8cb7895ebc1fa836e8cf3ceddfa7a705eba
Reviewed-on: https://github.com/flang-compiler/f18/pull/844
Peter Klausler [Tue, 10 Dec 2019 20:39:52 +0000 (12:39 -0800)]
[flang] Merge pull request flang-compiler/f18#864 from flang-compiler/pmk-fix
Revert recent addition of ActualArgument::PassedObject
Original-commit: flang-compiler/f18@
d1b6e3cd2c4ef79df6804edd85d7b1e1d398e255
Reviewed-on: https://github.com/flang-compiler/f18/pull/864
peter klausler [Mon, 9 Dec 2019 21:52:12 +0000 (13:52 -0800)]
[flang] Revert recent addition of ActualArgument::PassedObject
reformatting
Complete merging with current master
implement extension of inherited type-bound generics
Original-commit: flang-compiler/f18@
e58c4e53c2fcf6559e7254ce0fd1e4b96d158c73
Reviewed-on: https://github.com/flang-compiler/f18/pull/864
Tim Keith [Mon, 9 Dec 2019 22:26:59 +0000 (14:26 -0800)]
[flang] Merge pull request flang-compiler/f18#863 from flang-compiler/tsk-defined-op2
Resolve calls to type-bound generic names
Original-commit: flang-compiler/f18@
b3bb698086ab9a79c285f90b956036d8411f4520
Reviewed-on: https://github.com/flang-compiler/f18/pull/863
Tim Keith [Mon, 9 Dec 2019 21:36:19 +0000 (13:36 -0800)]
[flang] Resolve calls to type-bound generic names
Extend `ResolveGeneric` to handle calls to procedure components by
passing in the data-ref that is used as the passed-object argument.
`AddPassArg` takes care of adding a placeholder for the passed object.
This is shared by the generic and non-generic cases of calls to
procedure components.
Original-commit: flang-compiler/f18@
be83590183f7abf32c0cc111c812fd484af36f2b
Reviewed-on: https://github.com/flang-compiler/f18/pull/863
jeanPerier [Mon, 9 Dec 2019 10:53:53 +0000 (02:53 -0800)]
[flang] Merge pull request flang-compiler/f18#858 from flang-compiler/jpr-complex-power-promote-fix
Fix COMPLEX-REAL `/` and `**` operand promotion
Original-commit: flang-compiler/f18@
722caa61f217625aed4d4654e5f03627777d2323
Reviewed-on: https://github.com/flang-compiler/f18/pull/858
Jean Perier [Fri, 6 Dec 2019 09:18:20 +0000 (01:18 -0800)]
[flang] Fix COMPLEX/REAL `/` and `**` operand promotion
The real operand was always converted to the complex operand type.
The highest precison should be used instead. This fix converts the
real to a complex of the same kind before applying the promotion
rules for complex operands.
Reference to Fortran 2018 standard 10.9.1.3 that rules this added
in comments.
Original-commit: flang-compiler/f18@
0d6b9c33aae59d80ff1b77f3561a6acb1db98645
Reviewed-on: https://github.com/flang-compiler/f18/pull/858
Peter Klausler [Fri, 6 Dec 2019 21:56:08 +0000 (13:56 -0800)]
[flang] Merge pull request flang-compiler/f18#859 from flang-compiler/pmk-empty
Accept source files with no program units (flang-compiler/f18#658)
Original-commit: flang-compiler/f18@
2ebb75529c80a21658250dafffbf49ebdc27847e
Reviewed-on: https://github.com/flang-compiler/f18/pull/859
peter klausler [Fri, 6 Dec 2019 17:37:07 +0000 (09:37 -0800)]
[flang] Accept source files with no program units (flang-compiler/f18#658)
update documentation
Original-commit: flang-compiler/f18@
3dfb8314991035a428c514cf0ad46af446d64a4e
Reviewed-on: https://github.com/flang-compiler/f18/pull/859
Peter Klausler [Fri, 6 Dec 2019 17:52:37 +0000 (09:52 -0800)]
[flang] Merge pull request flang-compiler/f18#856 from flang-compiler/pmk-legacy-assignments
Allow assignment between INTEGER and LOGICAL as extension
Original-commit: flang-compiler/f18@
169f380eafa87f2164e4529a314701feaee55ad6
Reviewed-on: https://github.com/flang-compiler/f18/pull/856
peter klausler [Fri, 6 Dec 2019 00:18:39 +0000 (16:18 -0800)]
[flang] Allow assignment between INTEGER and LOGICAL as extension
Extend documentation
Original-commit: flang-compiler/f18@
7a719198fc7dc09f50cd1e4129d87f2ace711c4b
Reviewed-on: https://github.com/flang-compiler/f18/pull/856
Peter Klausler [Thu, 5 Dec 2019 20:50:21 +0000 (12:50 -0800)]
[flang] Merge pull request flang-compiler/f18#855 from flang-compiler/pmk-fix
Fix problems with passed-object arguments...
Original-commit: flang-compiler/f18@
882d20d4fb676535d0b96e2960d3874ce1a2a09a
Reviewed-on: https://github.com/flang-compiler/f18/pull/855
peter klausler [Thu, 5 Dec 2019 18:24:18 +0000 (10:24 -0800)]
[flang] Fix problems with passed-object arguments by deferring the
identification of their index in the dummy argument list,
simplifying their representation, completing the representation
of their actual arguments, and (while I'm here) resolving
calls to type-bound procedures whose bindings are known at
compilation time.
Button up class ActualArgument by making remaining data
members private and adding accessors & mutators.
Original-commit: flang-compiler/f18@
5eb60ec41912b0963e41bbc1a3141164efcb7fbf
Reviewed-on: https://github.com/flang-compiler/f18/pull/855
jeanPerier [Wed, 4 Dec 2019 10:07:31 +0000 (02:07 -0800)]
[flang] Merge pull request flang-compiler/f18#851 from flang-compiler/jpr-complex-literal-dump-2
Complex expression dump fixes
Original-commit: flang-compiler/f18@
84c57b8e011e0701cb582522faaacbf06479d88a
Reviewed-on: https://github.com/flang-compiler/f18/pull/851
Jean Perier [Tue, 3 Dec 2019 15:52:18 +0000 (07:52 -0800)]
[flang] Complex expression dump fixes
1. Dump negative parts in complex constants without parentheses
(-1., 0.) was dumped as ((-1.), 0.) from f18 expression format.
The latter format is only valid with the complex constructor extension
that is not supported by all compilers.
This commit ensure the former fromat is used in dumps so that dumps can
be used by all fortran compilers. It turns out the parenthesis added
by REAL::AsFortran are not required because operation lowering is
already taking care of this.
2. Dump evaluate::ComplexComponent with REAL/IMAG instead of %RE/%IM
f18 was failing to reparse its own dump in some cases involving
complex expressions like `-z**i`.
The reason was %RE and %IM were used to dump ComplexComponents.
%RE and %IM can only be used on designators but ComplexComponent can
contain arbitrary complex expressions.
Hence, %RE and %IM cannot be used to dump ComplexComponent.
This commit replace them with call to intrinsic function
REAL/IMAG.
Note that this may unfortunatly be unsafe if the user
shadowed REAL or IMAG but I do not see an easy way to solve
this... The current dump is not correct.
Original-commit: flang-compiler/f18@
4550a23d0bdce4ffa8d8765a1da4b35151eebe50
Reviewed-on: https://github.com/flang-compiler/f18/pull/851
Peter Klausler [Tue, 3 Dec 2019 18:59:46 +0000 (10:59 -0800)]
[flang] Merge pull request flang-compiler/f18#852 from flang-compiler/pmk-forward-private
Fix forward ref to derived type when symbol exists
Original-commit: flang-compiler/f18@
7471db2be0fc1b3e66de48acb8d573e9f31cf815
Reviewed-on: https://github.com/flang-compiler/f18/pull/852
peter klausler [Tue, 3 Dec 2019 18:21:37 +0000 (10:21 -0800)]
[flang] Fix forward ref to derived type when symbol exists
Fix some comments
Original-commit: flang-compiler/f18@
3274ed95459865057a2e77966863e6b01b5f6d35
Reviewed-on: https://github.com/flang-compiler/f18/pull/852
Peter Klausler [Tue, 3 Dec 2019 18:48:19 +0000 (10:48 -0800)]
[flang] Merge pull request flang-compiler/f18#850 from flang-compiler/pmk-853
Fix bug flang-compiler/f18#843, bad recovery from failed opens of source files
Original-commit: flang-compiler/f18@
db7214e2e6fd8f2ae5f9224748a61c749e35a1c0
Reviewed-on: https://github.com/flang-compiler/f18/pull/850
peter klausler [Tue, 3 Dec 2019 17:49:44 +0000 (09:49 -0800)]
[flang] Fix bug flang-compiler/f18#843, bad recovery from failed opens of source files
Original-commit: flang-compiler/f18@
27d9db610fc7302b8da33e19a70c441a0ead6c7c
Reviewed-on: https://github.com/flang-compiler/f18/pull/850
Tim Keith [Tue, 3 Dec 2019 18:28:39 +0000 (10:28 -0800)]
[flang] Merge pull request flang-compiler/f18#849 from flang-compiler/tsk-pure
Fix PURE check on procedure binding
Original-commit: flang-compiler/f18@
58f036ec01c0abd8c186914711f565388e67ae52
Reviewed-on: https://github.com/flang-compiler/f18/pull/849
Tim Keith [Tue, 3 Dec 2019 16:43:05 +0000 (08:43 -0800)]
[flang] Fix PURE check on procedure binding
A symbol that represents a procedure binding is PURE if the procedure
it is bound to is PURE. Fix `IsPureProcedure` to check that.
Make use of `IsPureProcedure` in `CheckSpecificationExprHelper`.
Original-commit: flang-compiler/f18@
c95f2eb4fb25d464977690ba03260be2451911d7
Reviewed-on: https://github.com/flang-compiler/f18/pull/849
Peter Klausler [Tue, 3 Dec 2019 17:19:26 +0000 (09:19 -0800)]
[flang] Merge pull request flang-compiler/f18#848 from flang-compiler/pmk-fix-gcc-7.2-build
Dodge GCC 7.2 bug
Original-commit: flang-compiler/f18@
567a1642f45d9831dea16bcab7e66ed9f2729e9f
Reviewed-on: https://github.com/flang-compiler/f18/pull/848
peter klausler [Mon, 2 Dec 2019 23:56:00 +0000 (15:56 -0800)]
[flang] Dodge GCC 7.2 bug
Original-commit: flang-compiler/f18@
bde158343aa254d529cac85657c4102194999b6f
Reviewed-on: https://github.com/flang-compiler/f18/pull/848
Peter Klausler [Mon, 2 Dec 2019 22:17:35 +0000 (14:17 -0800)]
[flang] Merge pull request flang-compiler/f18#847 from flang-compiler/pmk-forward-type-ref
Forward references to derived types
Original-commit: flang-compiler/f18@
5928825790958a89d5b29f7def7b1d31596a5a06
Reviewed-on: https://github.com/flang-compiler/f18/pull/847
peter klausler [Fri, 22 Nov 2019 16:15:02 +0000 (08:15 -0800)]
[flang] Implement forward references to derived types (fix flang-compiler/f18#573)
Restructuring PDT instantiation in preparation for forward references
Complete tests, pass them
Address review comments
Original-commit: flang-compiler/f18@
b66ba55a73c8e4b94ffd4164b8428a848e593b3f
Reviewed-on: https://github.com/flang-compiler/f18/pull/847
psteinfeld [Mon, 2 Dec 2019 21:31:26 +0000 (13:31 -0800)]
[flang] Merge pull request flang-compiler/f18#834 from flang-compiler/ps-zerodo
Add a check for DO step expressions being zero
Original-commit: flang-compiler/f18@
a5a55d5f3fb71109afd5d94ba3fdd0051778a19c
Reviewed-on: https://github.com/flang-compiler/f18/pull/834
Pete Steinfeld [Wed, 20 Nov 2019 21:33:04 +0000 (13:33 -0800)]
[flang] Add a check for DO step expressions being zero
This is prohibited by Section 11.1.7.4.1, paragraph 1.
Note also that we allow for REAL step expressions. But the check I
added only works for INTEGER step expressions.
I added a function to tools.cc to test to see if an expression is zero,
and I added calls to check-do.cc for regular and CONCURRENT DO
statements to this function. I made the regular DO a warning and the DO
CONCURRENT message an error. I added tests for the DO CONCURRENT case,
including a test that uses an integer constant.
Original-commit: flang-compiler/f18@
8c4fadfe00fec25f9c814a14aa1e4d31c21df3be
Reviewed-on: https://github.com/flang-compiler/f18/pull/834
Tim Keith [Mon, 2 Dec 2019 16:55:44 +0000 (08:55 -0800)]
[flang] Check functions that implement defined operators (flang-compiler/f18#846)
Section 15.4.3.4.2 specifies restrictions on functions that may be used
to implement an "extended-intrinsic-op". These checkw are implemented in
`CheckHelper::CheckDefinedOperator`.
Move `IsIntrinsicRelational` et al. to `semantics/tools.h` so that
the same logic is used to check both dummy and actual arguments.
Fix up tests that had errors that are now detected.
Original-commit: flang-compiler/f18@
b900762eed5883bfbc31349847381098de1e7b6a
Reviewed-on: https://github.com/flang-compiler/f18/pull/846
kiranchandramohan [Tue, 26 Nov 2019 21:34:03 +0000 (21:34 +0000)]
[flang] Minor fix in folding of reshape intrinsic (flang-compiler/f18#842)
The standard permits source to have more elements than the
result (as specified by the SHAPE arg). While copying, ensure
that we do not copy more than the number of elements of the
result.
Original-commit: flang-compiler/f18@
6b8284f4f2cff32fcf5483ea93d1d239ecdacd33
Reviewed-on: https://github.com/flang-compiler/f18/pull/842
Tim Keith [Tue, 26 Nov 2019 21:30:42 +0000 (13:30 -0800)]
[flang] Merge pull request flang-compiler/f18#841 from flang-compiler/tsk-assignment3
Analyze defined assignments
Original-commit: flang-compiler/f18@
706a166476f4c275e67adde14669f2b844f0ea39
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tim Keith [Sat, 23 Nov 2019 00:46:11 +0000 (16:46 -0800)]
[flang] Analyze intrinsic and user-defined assignments
Change expression analysis to do assignment statements as it currently
does call statements. Check there for defined assignment and set
`typedAssignment` in the `AssignmentStmt` node to contain the analyzed
assignment, either intrinsic or user-defined.
When `var = expr` is implemented by subroutine `sub`, the analyzed
assignment contains a procedure reference to `sub(var, (expr))`.
Add `IsDefinedAssignment` to decide based on types and ranks of lhs
and rhs whether is can be a defined assignment. The result is
tri-state because when they are both the same derived type it can
be either intrinsic or defined. Use this where a similar decision
is made in `check-declarations.cc`.
Change "Procedure referenced in PURE subprogram" error message to
contain the name of the procedure. If the reference is from a defined
assignment that name won't appear on the highlighted source line.
Original-commit: flang-compiler/f18@
5c87071210ec74e9395805dd547c107e7d3bf7b6
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tim Keith [Sat, 23 Nov 2019 00:04:56 +0000 (16:04 -0800)]
[flang] Add analyzed assignment to parse tree
Add `typedAssignment` to the `AssignmentStmt` node, analagous to
`typedExpr` in `Expr`. This represents the analyzed form of an assignment.
It may be a subroutine call in the case of a user-defined assignment.
Add `GetAssignment` function to get it from the parse tree node if present.
Original-commit: flang-compiler/f18@
675b0b9bb7617231e8e4bfa0c7a63423c74d79a4
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 22:58:26 +0000 (14:58 -0800)]
[flang] Extract Parenthesize function
Move the code to parenthesize an expression from `ExpressionAnalyzer`
into `evaluate/tools.h` so that it can be used to parenthesize an
`ActualArgument`. This will be needed for defined assignment calls.
Original-commit: flang-compiler/f18@
6180d1fb9bd8dbbf26697353b271deb59aa466fa
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 22:40:53 +0000 (14:40 -0800)]
[flang] Add checks for valid defined assignment procedures
Perform the checks from 15.4.3.4.3 to determine what procedures are
valid to implement defined assignment. This requires characterizing
procedures, so share the result of that with
`CheckSpecificsAreDistinguishable`.
Original-commit: flang-compiler/f18@
9e0d79f1735cf99b43f9ff7f6d712d7aa862dead
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 22:05:54 +0000 (14:05 -0800)]
[flang] Move distinguishability check to check-declarations.cc
The check that specific procedures of a generic are distinguishable
doesn't need to be done in `resolve-names.cc`. It can be deferred until
`check-declarations.cc` because it only depends on the symbol table.
Make use of `AttachDeclaration` when reporting errors
Refactor checks for different symbol details into separate functions
as they are getting more numerous.
Original-commit: flang-compiler/f18@
cd0d6930bba3ae92f2526d7ce1fbf5e39afe2f38
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 21:20:58 +0000 (13:20 -0800)]
[flang] Change AttachDeclaration to take reference instead of pointer
AttachDeclaration (and so also SayWithDeclaration) don't do anything
when passed a null pointer for the symbol and in all but one place they
are called the symbol can't be null. So change both function to take
`const Symbol &` rather than `const Symbol *`. Change it to handle
procedure bindings as well.
Add `SayWithDeclaration` to `CheckHelper` to simplify calling the one in
`evaluate` and prevent attaching the declaration when it would point at
the same line.
Original-commit: flang-compiler/f18@
5f1c2ff6638da837616fa7ae6e3e121544c89bb7
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 20:52:23 +0000 (12:52 -0800)]
[flang] Combine GenericDetails and GenericBindingDetails
`GenericDetails` and `GenericBindingDetails` were almost identical:
the former has optional data members to handle the case when a specific
procedure or derived type has the same name as the generic symbol.
Most places they are handled the same way so it simplifies things to
have only one type. In the case where we want to know if it is a generic
binding (e.g. in `mod-file.cc`) we can check the kind of scope that owns
the symbol.
Save name from the generic binding for better location of error messages.
Original-commit: flang-compiler/f18@
f65a9edca232098be1412607e59b6ed1d5803ad7
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Tim Keith [Fri, 22 Nov 2019 20:40:37 +0000 (12:40 -0800)]
[flang] Refactor GenericKind
Change GenericKind from an enum class to a variant that includes the
`NumericOperator`, `LogicalOperator`, and `RelationalOperator` from `common`.
This allows for better tests like `IsIntrinsicOperator` (which used to
check for being in a range of the `GenericKind` enumeration) and
simplifies mapping the kind to a string representation.
Original-commit: flang-compiler/f18@
c74327c393649ff95355f00333ffd2352b148f72
Reviewed-on: https://github.com/flang-compiler/f18/pull/841
Tree-same-pre-rewrite: false
Peter Klausler [Fri, 22 Nov 2019 22:47:17 +0000 (14:47 -0800)]
[flang] Merge pull request flang-compiler/f18#836 from flang-compiler/pmk-kinds
Fold MERGE, use it in ISO_FORTRAN_ENV
Original-commit: flang-compiler/f18@
34e04649fe6515a84cc5288b8ecfb133bd618e5a
Reviewed-on: https://github.com/flang-compiler/f18/pull/836
peter klausler [Thu, 21 Nov 2019 21:31:52 +0000 (13:31 -0800)]
[flang] Fold MERGE, use it in ISO_FORTRAN_ENV
Reduce use of intrinsic type KIND codes in ISO_FORTRAN_ENV
Use COUNT([x]) rather than MERGE(1,0,x)
Fix problems in array constructor expression analysis
Original-commit: flang-compiler/f18@
79018f7126a55a4b8a907f121cc099d5f4f9666a
Reviewed-on: https://github.com/flang-compiler/f18/pull/836
Isuru Fernando [Fri, 22 Nov 2019 21:54:36 +0000 (15:54 -0600)]
[flang] Need algorithm for std::min (flang-compiler/f18#837)
Original-commit: flang-compiler/f18@
d20a79cdd952e5013c741f052157e50ecb391d34
Reviewed-on: https://github.com/flang-compiler/f18/pull/837
Peter Klausler [Thu, 21 Nov 2019 23:17:03 +0000 (15:17 -0800)]
[flang] Merge pull request flang-compiler/f18#835 from flang-compiler/pmk-call12
Enable, extend, and pass call12.f90 test; revert some recent changes
Original-commit: flang-compiler/f18@
3feacd8a637f150b8433bbc46d10c53cc054957a
Reviewed-on: https://github.com/flang-compiler/f18/pull/835
peter klausler [Thu, 21 Nov 2019 21:55:17 +0000 (13:55 -0800)]
[flang] Address review comments
Original-commit: flang-compiler/f18@
0ce592c7c550027b8d4516af2cda8330b2ddc08a
Reviewed-on: https://github.com/flang-compiler/f18/pull/835
peter klausler [Thu, 21 Nov 2019 21:35:20 +0000 (13:35 -0800)]
[flang] Reformat all C++ in lib/*
Original-commit: flang-compiler/f18@
232bcedb6647592e63dc0dec6c6bd83fd41082b4
Reviewed-on: https://github.com/flang-compiler/f18/pull/835
Tree-same-pre-rewrite: false
peter klausler [Wed, 20 Nov 2019 03:10:02 +0000 (19:10 -0800)]
[flang] Revert Symbol::operator=() changes
Rearrange "if" nest for clarity
Pass call12.f90 test.
Original-commit: flang-compiler/f18@
69a1a2b796f64c13b37f417dc03ff6a416384b94
Reviewed-on: https://github.com/flang-compiler/f18/pull/835
Tree-same-pre-rewrite: false
psteinfeld [Thu, 21 Nov 2019 19:33:42 +0000 (11:33 -0800)]
[flang] Merge pull request flang-compiler/f18#814 from flang-compiler/ps-c1140
Changes to check for constraint C1140 -- deallocation of polymorphic entities
Original-commit: flang-compiler/f18@
794b75155abfca6a938b5baa9bff0bc2cf2c4b67
Reviewed-on: https://github.com/flang-compiler/f18/pull/814
Pete Steinfeld [Tue, 5 Nov 2019 18:18:33 +0000 (10:18 -0800)]
[flang] Changes to check for constraint C1140
This constraint prohibits deallocation of polymorphic entities in a DO
CONCURRENT.
Section 9.7.3.2 specifies the situations that might cause deallocation
of a polymorphic entity. The ones that are applicable to a DO CONCURRENT
are exiting from a block that declares such variables, intrinsic
assignment, and an actual DEALLOCATE statement. This section also
specifies (paragraph 8) that deallocation of a derived type causes
deallocation of all of its allocatable subobjects.
Section 10.2.1.3 specifies what happens during intrinsic assignment.
Paragraph 3 states If the variable is an allocated allocatable variable,
it is deallocated if expr is an array of different shape, any
corresponding length type parameter values of the variable and expr
differ, or the variable is polymorphic and the dynamic type or any
corresponding kind type parameter values of the variable and expr
differ." Thus, an allocatable polymorphic variable on the left hand side
of an assignment statement gets deallocated. Paragraph 13 states that
"For a noncoarray allocatable component the following sequence of
operations is applied.
(1) If the component of the variable is allocated, it is deallocated."
Thus, a variable on the left-hand side of an assignment statement might have noncorray allocatable components. Such components will be deallocated.
Deallocation can be caused by exiting from a block where the entity is
declared, from an assignment, and from direct deallocation.
Original-commit: flang-compiler/f18@
7d1932d344308d8266503268a7534532cebe6087
Reviewed-on: https://github.com/flang-compiler/f18/pull/814
Peter Klausler [Tue, 19 Nov 2019 22:53:26 +0000 (14:53 -0800)]
[flang] Merge pull request flang-compiler/f18#833 from flang-compiler/pmk-call11
For call11.f90: more checks on PURE subprograms and TBP bindings
Original-commit: flang-compiler/f18@
1122b381d65add5d33ee5b39ac39b6d07e110955
Reviewed-on: https://github.com/flang-compiler/f18/pull/833
peter klausler [Fri, 15 Nov 2019 22:26:10 +0000 (14:26 -0800)]
[flang] For call11.f90: more checks on PURE subprograms and TBP bindings
Original-commit: flang-compiler/f18@
7aa47f0b9e4ad5a7496d3142953092a404f621a2
Reviewed-on: https://github.com/flang-compiler/f18/pull/833
Peter Klausler [Tue, 19 Nov 2019 18:32:13 +0000 (10:32 -0800)]
[flang] Merge pull request flang-compiler/f18#802 from flang-compiler/pmk-io-header
API for generated code to use to implement I/O data transfer statements
Original-commit: flang-compiler/f18@
696bce96856a00b5912afb71bb21269698660eed
Reviewed-on: https://github.com/flang-compiler/f18/pull/802
peter klausler [Fri, 11 Oct 2019 20:46:58 +0000 (13:46 -0700)]
[flang] Define runtime I/O library interface to be used by generated code.
Original-commit: flang-compiler/f18@
82cb9b0c8794e253d6bec4fd01be1b6b5428fc56
Reviewed-on: https://github.com/flang-compiler/f18/pull/802
Steve Scalpone [Mon, 18 Nov 2019 16:34:52 +0000 (09:34 -0700)]
[flang] Merge pull request flang-compiler/f18#832 from DavidTruby/drone_ci
Change images used for CI to solve build issues
Original-commit: flang-compiler/f18@
369327a6d0c512973359f57a90b5482f45b2b6f2
Reviewed-on: https://github.com/flang-compiler/f18/pull/832
David Truby [Mon, 18 Nov 2019 14:27:34 +0000 (14:27 +0000)]
[flang] Another atempt to lower core count
Original-commit: flang-compiler/f18@
60eeb446b160826d587adeea939cc99416c03df5
Reviewed-on: https://github.com/flang-compiler/f18/pull/832
David Truby [Mon, 18 Nov 2019 10:04:54 +0000 (10:04 +0000)]
[flang] Change images used for CI to solve build issues
Original-commit: flang-compiler/f18@
325b26b3a4025d4c54725db6b557276025f706fa
Reviewed-on: https://github.com/flang-compiler/f18/pull/832
Tree-same-pre-rewrite: false
Steve Scalpone [Sat, 16 Nov 2019 22:03:47 +0000 (14:03 -0800)]
[flang] Merge pull request flang-compiler/f18#826 from flang-compiler/sjs-feature-rename
Rename features.h
Original-commit: flang-compiler/f18@
6cf3196dbf3b857c5f308101709b473a5578743a
Reviewed-on: https://github.com/flang-compiler/f18/pull/826
Steve Scalpone [Fri, 15 Nov 2019 04:34:50 +0000 (20:34 -0800)]
[flang] Rename flang-features to Fortran-features; update the guard macro.
Original-commit: flang-compiler/f18@
1a7f5596ecab5eb954130713c5b9e4f6a16c5ab7
Reviewed-on: https://github.com/flang-compiler/f18/pull/826
Steve Scalpone [Thu, 14 Nov 2019 23:16:38 +0000 (15:16 -0800)]
[flang] Rename features.h because many linux systems have an include file called features.h which can complicate makefiles that use a search path.
Original-commit: flang-compiler/f18@
fc34d0ddf355e4f978e2cb984486191041c24ea9
Reviewed-on: https://github.com/flang-compiler/f18/pull/826
Tree-same-pre-rewrite: false
Peter Klausler [Fri, 15 Nov 2019 18:36:18 +0000 (10:36 -0800)]
[flang] Merge pull request flang-compiler/f18#825 from flang-compiler/pmk-call10
Extend, enable, and pass test call10.f90 (restrictions on PURE subprograms)
Original-commit: flang-compiler/f18@
bf1cc4a9bb821aa1cc12c189c2c3a05b7bf11619
Reviewed-on: https://github.com/flang-compiler/f18/pull/825
peter klausler [Tue, 12 Nov 2019 23:43:09 +0000 (15:43 -0800)]
[flang] Semantic checks for PURE subprograms (test call10.f90)
Fix bug found in testing
Original-commit: flang-compiler/f18@
ccdd7326ba56c5a3cf8bc944516e3d1b93b25848
Reviewed-on: https://github.com/flang-compiler/f18/pull/825
Steve Scalpone [Fri, 15 Nov 2019 16:36:43 +0000 (08:36 -0800)]
[flang] Merge pull request flang-compiler/f18#829 from DavidTruby/drone_ci
Disable arm64 gcc builds in CI until they can be fixed
Original-commit: flang-compiler/f18@
c8d226d181b222bc0e0d829922d166acdf26a601
Reviewed-on: https://github.com/flang-compiler/f18/pull/829
David Truby [Fri, 15 Nov 2019 16:30:28 +0000 (16:30 +0000)]
[flang] Disable arm64 gcc builds in CI until they can be fixed
Currently the arm64 gcc builds in CI are getting stuck,
so disable these to get CI working again until they're fixed.
Original-commit: flang-compiler/f18@
49803e62ee3fdfc29ae0bdd6a712cc288e10bb26
Reviewed-on: https://github.com/flang-compiler/f18/pull/829
Tim Keith [Fri, 15 Nov 2019 16:13:06 +0000 (08:13 -0800)]
[flang] Merge pull request flang-compiler/f18#827 from flang-compiler/tsk-bad-deref
Fix bad deferences in ProgramTree
Original-commit: flang-compiler/f18@
4190785904a7953d964b3ee41bf9b9183a4d07b7
Reviewed-on: https://github.com/flang-compiler/f18/pull/827
Tim Keith [Fri, 15 Nov 2019 03:22:24 +0000 (19:22 -0800)]
[flang] Fix bad deference in ProgramTree
We weren't handling MainProgram with no ProgramStmt correctly in
ProgramTree. When building it we were dereferencing an empty optional.
And in ResolveSpecificationParts we were dereferencing a null pointer.
Original-commit: flang-compiler/f18@
1bda90d0051d7b67bf76f9aaa1f2963976a15d4a
Reviewed-on: https://github.com/flang-compiler/f18/pull/827
Steve Scalpone [Fri, 15 Nov 2019 05:59:19 +0000 (21:59 -0800)]
[flang] Merge pull request flang-compiler/f18#823 from DavidTruby/drone_ci
Add CI file for cloud.drone.io
Original-commit: flang-compiler/f18@
14a4f166e9004683a15cddb0020a9b5dd140a810
Reviewed-on: https://github.com/flang-compiler/f18/pull/823
David Truby [Thu, 14 Nov 2019 15:16:15 +0000 (15:16 +0000)]
[flang] Reduce number of threads used for building.
This is to avoid running out of memory on some builds.
Original-commit: flang-compiler/f18@
f8abe443cf3d12d47d08d61530f4da4b4b96c0c5
Reviewed-on: https://github.com/flang-compiler/f18/pull/823
David Truby [Wed, 13 Nov 2019 11:31:44 +0000 (11:31 +0000)]
[flang] Add CI file for cloud.drone.io
Original-commit: flang-compiler/f18@
32252639abd07ed409fe5f48755d852b91b9ae11
Reviewed-on: https://github.com/flang-compiler/f18/pull/823
Tree-same-pre-rewrite: false
Steve Scalpone [Fri, 15 Nov 2019 01:46:43 +0000 (17:46 -0800)]
[flang] Merge pull request flang-compiler/f18#817 from kiranktp/master
Fix for flang-compiler/f18#694 - Unexpected error when compiling submodule
Original-commit: flang-compiler/f18@
d7b1121189483489b5c5488b159fad3d73d05582
Reviewed-on: https://github.com/flang-compiler/f18/pull/817
kiranktp [Thu, 7 Nov 2019 09:47:57 +0000 (15:17 +0530)]
[flang] Fix for flang-compiler/f18#694 - Unexpected error when compiling submodule
Incorporated all review comments and updated the test case.
Change-Id: I03939bfc705cc5319a0b7da3305026b8403b8edc
Original-commit: flang-compiler/f18@
5c602bfbc74a3cad1de6f35204bbfd64ac29bfa3
Reviewed-on: https://github.com/flang-compiler/f18/pull/817
kiranktp [Thu, 7 Nov 2019 09:47:57 +0000 (15:17 +0530)]
[flang] Fix for flang-compiler/f18#694 - Unexpected error when compiling submodule
Incorporated all review comments and updated the test case.
Change-Id: I03939bfc705cc5319a0b7da3305026b8403b8edc
Original-commit: flang-compiler/f18@
a52b0367ea1f34e0059b0043d1f370bec5896c74
Reviewed-on: https://github.com/flang-compiler/f18/pull/817
Tree-same-pre-rewrite: false
kiranktp [Thu, 7 Nov 2019 09:47:57 +0000 (15:17 +0530)]
[flang] Fix for flang-compiler/f18#694 - Unexpected error when compiling submodule
Incorporated all review comments and updated the test case.
Change-Id: I03939bfc705cc5319a0b7da3305026b8403b8edc
Original-commit: flang-compiler/f18@
010da4228e31e1fd75aca6410ee8057746fa9857
Reviewed-on: https://github.com/flang-compiler/f18/pull/817
Tree-same-pre-rewrite: false
kiranktp [Thu, 7 Nov 2019 09:47:57 +0000 (15:17 +0530)]
[flang] Fix for flang-compiler/f18#694 - Unexpected error when compiling submodule
Change-Id: I03939bfc705cc5319a0b7da3305026b8403b8edc
Original-commit: flang-compiler/f18@
e1237939aa4b198119671096a05219ab9374b5c2
Reviewed-on: https://github.com/flang-compiler/f18/pull/817
Tree-same-pre-rewrite: false
Tim Keith [Fri, 15 Nov 2019 00:16:30 +0000 (16:16 -0800)]
[flang] Merge pull request flang-compiler/f18#824 from flang-compiler/tsk-omp-crash
Fix crashes in ResolveOmpObject and RewriteOpenMPLoopConstruct
Original-commit: flang-compiler/f18@
283542ff5a04fa5de65a252891567001fbe24857
Reviewed-on: https://github.com/flang-compiler/f18/pull/824
Tim Keith [Thu, 14 Nov 2019 23:01:20 +0000 (15:01 -0800)]
[flang] Fix crashes in ResolveOmpObject and RewriteOpenMPLoopConstruct
Using debug build of f18, `omp-resolve01.f90` sometimes crashed in
`OmpVisitor::ResolveOmpObject`. This was because when the designator was
analyzed it could be rewritten from an `ArrayElement` to a `Substring`.
That made the reference to the `Name` inside the designator no longer
valid so the crash happened when it was referenced later. The fix is to
return when the substring is detected so the name is not referenced.
Also, the name returned from `ResolveDesignator` can but null so it must
be checked.
The crash in `RewriteOpenMPLoopConstruct` happened intermittently on
`omp-loop-association.f90`. It happened when the DO construct was the
last element of the block. In that case `block.erase()` returns an
iterator pointing to `block.end()` which must not be dereferenced.
Original-commit: flang-compiler/f18@
3299972d047696aca28212131ab4644a3966fc8b
Reviewed-on: https://github.com/flang-compiler/f18/pull/824
Peter Klausler [Mon, 11 Nov 2019 22:41:22 +0000 (14:41 -0800)]
[flang] Merge pull request flang-compiler/f18#822 from flang-compiler/pmk-nullptr
Remove explicit comparisons to `nullptr` and most usage of `has_value()`
Original-commit: flang-compiler/f18@
fdb351ca2afb0d71028785da4687113343e11f54
Reviewed-on: https://github.com/flang-compiler/f18/pull/822
peter klausler [Sat, 9 Nov 2019 17:29:31 +0000 (09:29 -0800)]
[flang] Remove most comparisons to nullptr
Remove needless usage of has_value()
Original-commit: flang-compiler/f18@
1da7fcf7a54066b18e521620ecedb79c7cd2eb97
Reviewed-on: https://github.com/flang-compiler/f18/pull/822
Peter Klausler [Sat, 9 Nov 2019 17:00:27 +0000 (09:00 -0800)]
[flang] Merge pull request flang-compiler/f18#818 from flang-compiler/pmk-call09
Check semantics for actual arguments associated with dummy procedures
Original-commit: flang-compiler/f18@
5de75d9118e6b0f596599a126fc69383eeaef208
Reviewed-on: https://github.com/flang-compiler/f18/pull/818
peter klausler [Fri, 8 Nov 2019 00:01:38 +0000 (16:01 -0800)]
[flang] checkpoint, all tests pass
Fix name resolution for undeclared intrinsic actual arguments
Original-commit: flang-compiler/f18@
12470f06bcc09eb4858af9c3e412752d7ba71aee
Reviewed-on: https://github.com/flang-compiler/f18/pull/818
Steve Scalpone [Fri, 8 Nov 2019 05:20:57 +0000 (21:20 -0800)]
[flang] Merge pull request flang-compiler/f18#808 from Sameeranjoshi/master
[OpenMP] Semantic check for Master construct
Original-commit: flang-compiler/f18@
d8b6e8e4feaa59c4ffe57a56e9535f201f06d6d9
Reviewed-on: https://github.com/flang-compiler/f18/pull/808
sameeranjoshi17 [Wed, 6 Nov 2019 11:43:22 +0000 (17:13 +0530)]
[flang] Added passing test case
Original-commit: flang-compiler/f18@
752142055b0d029a0e483e6b8a74cc507f0f49ab
Reviewed-on: https://github.com/flang-compiler/f18/pull/808
sameeranjoshi17 [Wed, 6 Nov 2019 08:48:12 +0000 (14:18 +0530)]
[flang] Added test case for semantic check of OpenMP Master construct
Original-commit: flang-compiler/f18@
22f3088c76517b32996962da4ab4687b376ef878
Reviewed-on: https://github.com/flang-compiler/f18/pull/808
Tree-same-pre-rewrite: false
sameeranjoshi17 [Sun, 3 Nov 2019 17:38:26 +0000 (23:08 +0530)]
[flang] semantic checks for Master construct
Original-commit: flang-compiler/f18@
b052a710629cc08cda27de579651dd5328e24b9f
Reviewed-on: https://github.com/flang-compiler/f18/pull/808
Tree-same-pre-rewrite: false
Tim Keith [Thu, 7 Nov 2019 22:46:58 +0000 (14:46 -0800)]
[flang] Merge pull request flang-compiler/f18#815 from flang-compiler/tsk-defined-ops
Add support for logical abbreviations and .XOR.
Original-commit: flang-compiler/f18@
a7a581526e21d2f2659192bc81ecff321a272e66
Reviewed-on: https://github.com/flang-compiler/f18/pull/815
Tim Keith [Wed, 6 Nov 2019 23:54:26 +0000 (15:54 -0800)]
[flang] Add support for logical abbreviations and .XOR.
Update the grammar to handle logical abbreviations (e.g. `.A.` for `.AND.`)
when the feature is enabled. Only support `.X.` when both XOR and
logical abbreviations are enabled.
Fix the driver to enable logical abbreviations with the
`-flogical-abbreviations` option. This was already documented in
`documentation/Extensions.md`.
Remove `parser::Expr::XOR` from the parse tree and immediately map
`.XOR.` to `.NEQV.` if that feature is enabled. This was already being
done during expression analysis anyway.
Add `LanguageFeatureControl::GetNames` to return all of the names of
a logical or relational operator, depending on which features are
enabled. Use these in both name resolution and expression analysis.
Add `Not` to `LogicalOperator` to help in those cases.
Fix handling of BOZ literals: A numeric operation with one real or
integer operand and the other a BOZ literal is intrinsic.
Also, unary plus with a BOZ literal operand is also intrinsic.
Original-commit: flang-compiler/f18@
956bd50bc7c93a31bb3ac39841d7b5ba15ff04a3
Reviewed-on: https://github.com/flang-compiler/f18/pull/815
Tim Keith [Wed, 6 Nov 2019 19:15:03 +0000 (11:15 -0800)]
[flang] Move features.h from parser to common
Which features are enabled and disabled applies to more than just the
parser, so move that functionality to `common`.
Original-commit: flang-compiler/f18@
98b3240efc25095b6bdfa43280513f2afcac99e1
Reviewed-on: https://github.com/flang-compiler/f18/pull/815
Tree-same-pre-rewrite: false
Peter Klausler [Tue, 5 Nov 2019 18:56:41 +0000 (10:56 -0800)]
[flang] Merge pull request flang-compiler/f18#809 from flang-compiler/pmk-symbol-refs
Convert more non-nullable pointers to Reference<>s
Original-commit: flang-compiler/f18@
4a6d6f184bcf54de971f30df0bf6649e2768016f
Reviewed-on: https://github.com/flang-compiler/f18/pull/809
peter klausler [Mon, 4 Nov 2019 19:08:13 +0000 (11:08 -0800)]
[flang] Change more pointers into references
Remove unused interface
Respond to review comments
Original-commit: flang-compiler/f18@
7fdfe7b4acb28578dddc23965ce9c890fbbd6c8a
Reviewed-on: https://github.com/flang-compiler/f18/pull/809
vdonaldson [Tue, 5 Nov 2019 18:11:36 +0000 (10:11 -0800)]
[flang] Relax the implementation of constraint C1302. (flang-compiler/f18#805)
* Relax the implementation of constraint C1302.
When a list of format items can be unambiguously partitioned into individual items even though one or more otherwise required comma separators are omitted, generate a warning rather than an error.
Fixes flang-compiler/f18#703
Original-commit: flang-compiler/f18@
79c0731137e1092c26c4dec7c12113c52a72effd
Reviewed-on: https://github.com/flang-compiler/f18/pull/805