Commit Graph

2115 Commits

Author SHA1 Message Date
Peter Steinfeld aafeb34962 [flang] Fixes for DO constraint C1124
The constraint says that a variable-name in a locality-spec shall be the name
of a variable in the innermost executable construct or scoping unit that
includes the DO CONCURRENT statement.  This check was already being made in
resolve-names.cc for LOCAL and LOCAL_INIT locality specs but not for the
SHARED locality spec.  Also, there was some code in check-do.cc that was
intended to be used to enforce this constraint at some time in the future.

I added code to resolve-names.cc to extend the checking to the SHARED locality
spec and removed the unused code from check-do.cc.  I also extended the
existing tests in resolve35.f90 to exercise the new code.

Original-commit: flang-compiler/f18@b421923d94
Reviewed-on: https://github.com/flang-compiler/f18/pull/533
Tree-same-pre-rewrite: false
2019-06-27 12:33:36 -07:00
Peter Klausler 4711129fcc [flang] Merge pull request flang-compiler/f18#532 from peterwaller-arm/fix-gcc-7-build
Revert "Remove needless braces"

Original-commit: flang-compiler/f18@c1c0a64582
Reviewed-on: https://github.com/flang-compiler/f18/pull/532
2019-06-27 09:56:58 -07:00
Peter Waller c9944df916 [flang] Revert "Remove needless braces"
This reverts commit edd18355be574122aaa9abf58c15d8c50fb085a1.

Original-commit: flang-compiler/f18@e5d164fd11
Reviewed-on: https://github.com/flang-compiler/f18/pull/532
2019-06-26 09:44:08 +00:00
vdonaldson 6b688f9473 [flang] Remove unnecessary semicolons to avoid gcc warnings. (flang-compiler/f18#529)
Original-commit: flang-compiler/f18@bdba836254
Reviewed-on: https://github.com/flang-compiler/f18/pull/529
2019-06-26 15:50:10 -07:00
vdonaldson 3b14129337 [flang] Initialize PRINT semantics. Fixes flang-compiler/f18#516 (flang-compiler/f18#528)
There are no Clause 12 constraints to check for PRINT, but PRINT does share
FMT specifier processing with READ and WRITE.  To avoid interactions between
these I/O statements, reset IoChecker values for PRINT.

Original-commit: flang-compiler/f18@6a54766718
Reviewed-on: https://github.com/flang-compiler/f18/pull/528
2019-06-26 15:46:48 -07:00
Steve Scalpone 6e9658daab [flang] Merge pull request flang-compiler/f18#526 from flang-compiler/sjs-build-predef-modfiles
Compile and install the predefined module files.

Original-commit: flang-compiler/f18@c9b23dc706
Reviewed-on: https://github.com/flang-compiler/f18/pull/526
2019-06-26 15:46:04 -07:00
Steve Scalpone 93c63ed8c2 [flang] Compile and install the predefined module files.
Change the CMakeFile.txt in tools/f18 to build the predefined modules with the just-built compiler. The mod files are created in the new "include" subdirectory of the binary target directory.  The mod files are installed to ${CMAKE_INSTALL_PREFIX}/include.

The f18 driver is already installed in ${CMAKE_INSTALL_PREFIX}/bin.  This change change the location of the f18 binary build to a sibling directory of "include" called "bin" instead of at the top level of the binary destination directory. This change is in anticipation of changing the driver to find the include directory using a path relative to the location of f18.

Update the test scripts to find f18 in the bin subdirectory.

Remove the simple predefined module tests from test/semantics because they are compiled as part of the build and don't need to be recompiled as part of a test.

Original-commit: flang-compiler/f18@7811ccecdc
Reviewed-on: https://github.com/flang-compiler/f18/pull/526
2019-06-25 09:57:38 -07:00
Jinxin (Brian) Yang 125f295353 [flang] OpenMP structural check framework (PARALLEL as example) (flang-compiler/f18#493)
This patch is to show the framework to do OpenMP structure related check and you may find missing/incomplete implementation, which will be added in the future.

1. Each encountering construct has its own context and the context info will be filled while walking the directive/clause nodes. In the `Leave`, the current OpenMP context will be popped out.

2. When entering the construct, necessary nesting check will be performed. Use std::vector to implement the context stack because certain nesting restrictions may need to trace back more than one level.

3. PARALLEL construct is used as an example for clause validity check.

4. `EnumSet` is used to represent the directive/clause sets and to show the error msg. All the error msgs are quoted from the specification.

5. Necessary `CharBlock` is added for error msgs.

Original-commit: flang-compiler/f18@620441c03e
Reviewed-on: https://github.com/flang-compiler/f18/pull/493
2019-06-25 16:18:51 -07:00
vdonaldson 69f5f13738 [flang] Clause 13 (Input/output editing) syntax and semantic checking (flang-compiler/f18#498)
* Clause 13 (Input/output editing) syntax and semantic checking

Diagnose:
 - all clause syntax errors (independent of normal parsing)
 - all clause constraints
 - use of non-standard extensions under -Mstandard
 - obvious program requirement violations

The code:
 - is invoked for both format statement and I/O statement constant formats
 - should be useable by the runtime I/O library for runtime formats
 - is able to recover from errors
 - is able to diagnose multiple errors in a single format
 - has accurate markers for errors
 - can process (fixed character size) Hollerith strings
 - generates reasonable error messages for known error scenarios
 - should not require C++ run-time library support

The code is templatized for use with fixed size character kind={1,2,4} input,
but only the kind=1 variant is actually exercised.

* Review update.

* Review update.

* Review update.

* Improve error processing of unterminated formats.

Original-commit: flang-compiler/f18@c04b7518df
Reviewed-on: https://github.com/flang-compiler/f18/pull/498
2019-06-25 15:59:30 -07:00
Tim Keith a0b0bb43ed [flang] Merge pull request flang-compiler/f18#521 from flang-compiler/tsk2
Check constraints on passed-object dummy argument

Original-commit: flang-compiler/f18@d1d9f6eb78
Reviewed-on: https://github.com/flang-compiler/f18/pull/521
2019-06-25 14:41:53 -07:00
Tim Keith fe899298d0 [flang] Check constraints on passed-object dummy argument
The passed-object dummy argument cannot be checked until the
interfaces of contained subprograms are known. To accomplish this,
add `FinishSpecificationPart` pass to run after all specification
parts have been analyzed but before any of the execution parts.
This visits all derived types defined in each scope and performs
the checks on each procedure component and procedure binding.

Add a flag to `ParamValue` to distinguish kind from len parameters.

Fix some tests that had errors we now detect.

Original-commit: flang-compiler/f18@4789643c5b
Reviewed-on: https://github.com/flang-compiler/f18/pull/521
2019-06-23 10:59:32 -07:00
Tim Keith 432e62b417 [flang] Add passArg to ProcEntityDetails and ProcBindingDetails
Add `passArg` to `ProcEntityDetails` and `ProcBindingDetails`.
The is the symbols that represents the passed-object dummy argument,
or nullptr if none.

As both of these classes need `passName` and `passArg`, create a mixin
class, `WithPassArg` for the shared content.

Change passName_ from optional to pointer because that makes it a little
easier to work with and there is no need to have a copy of the name.

Original-commit: flang-compiler/f18@1cdd1a5b87
Reviewed-on: https://github.com/flang-compiler/f18/pull/521
Tree-same-pre-rewrite: false
2019-06-22 18:53:16 -07:00
Tim Keith 9a98616dbb [flang] Add AsFortran() for types
Add an `AsFortran()` member function to `DeclTypeSpec` and related
classes to convert types to a Fortran representation. This allows
error messages to mention types. It also fixes `.mod` file writing
where it previous used `operator<<` to convert types to Fortran.

Original-commit: flang-compiler/f18@eb16f8b5dd
Reviewed-on: https://github.com/flang-compiler/f18/pull/521
Tree-same-pre-rewrite: false
2019-06-22 18:14:14 -07:00
Tim Keith 377914d8b3 [flang] Add IsIsoCType()
It identifies the types `C_PTR` and `C_FUNPTR` from predefined
module `ISO_C_BINDING`.

Original-commit: flang-compiler/f18@fcbef2e18b
Reviewed-on: https://github.com/flang-compiler/f18/pull/521
Tree-same-pre-rewrite: false
2019-06-21 17:32:11 -07:00
psteinfeld 83fa5b0532 [flang] Merge pull request flang-compiler/f18#513 from flang-compiler/ps-c1127
Test for constraint C1127

Original-commit: flang-compiler/f18@fbde2dd26d
Reviewed-on: https://github.com/flang-compiler/f18/pull/513
2019-06-25 09:45:07 -07:00
Peter Steinfeld 21d1e7131d [flang] Downgrading the semantics check for C1127 to a warning.
This check to see if there are two DEFAULT (NONE) clauses in a DO CONCURRENT
header.

Original-commit: flang-compiler/f18@9b234125fa
Reviewed-on: https://github.com/flang-compiler/f18/pull/513
2019-06-24 13:09:21 -07:00
Peter Steinfeld db1ba910c5 [flang] Test for constraint C1127
The DEFAULT ( NONE ) locality-spec shall not appear more than once in a given
concurrent-locality.

Original-commit: flang-compiler/f18@fcca28ef3c
Reviewed-on: https://github.com/flang-compiler/f18/pull/513
Tree-same-pre-rewrite: false
2019-06-24 13:09:21 -07:00
Tim Keith cf1789e602 [flang] Merge pull request flang-compiler/f18#524 from flang-compiler/tsk1
Fix internal error due to missing type

Original-commit: flang-compiler/f18@72f88d1729
Reviewed-on: https://github.com/flang-compiler/f18/pull/524
2019-06-24 16:34:28 -07:00
Tim Keith facd7147f4 [flang] Fix internal error due to missing type
If a name is declared in a module with just `private :: x`,
we don't know if `x` is supposed to be an object or procedure,
so it ends up not getting an implicit type. This leads to an
internal error when writing the `.mod` file.

The fix requires two changes:
1. Cause all `EntityDetails` to be converted to `ObjectEntityDetails`
   in `ResolveSpecificationParts`. This is done by calling `PopScope()`.
   The reason for not calling it there no longer applies since the
   addition of the `ExecutionPartSkimmer` pass.
2. In the same place, apply the implicit typing rules to every entity
   in the scope.

Fixes flang-compiler/f18#514, fixes flang-compiler/f18#520.

Original-commit: flang-compiler/f18@7e4185e9ff
Reviewed-on: https://github.com/flang-compiler/f18/pull/524
2019-06-24 15:22:57 -07:00
Eric Schweitz acd1cab2d4 [flang] Merge pull request flang-compiler/f18#507 from schweitzpgi/master
Add the FIR dialect of MLIR document

Original-commit: flang-compiler/f18@49d09f84ed
Reviewed-on: https://github.com/flang-compiler/f18/pull/507
2019-06-24 13:18:27 -07:00
Eric Schweitz 1a66379de4 [flang] address review comments
add words on what is meant by meta information

Original-commit: flang-compiler/f18@ee2f3acf3c
Reviewed-on: https://github.com/flang-compiler/f18/pull/507
2019-06-20 10:58:08 -07:00
Eric Schweitz 20984efc71 [flang] Add the FIR dialect of MLIR document
Original-commit: flang-compiler/f18@10ab8b42b3
Reviewed-on: https://github.com/flang-compiler/f18/pull/507
Tree-same-pre-rewrite: false
2019-06-19 14:11:32 -07:00
Tim Keith 9e58499492 [flang] Merge pull request flang-compiler/f18#523 from flang-compiler/tsk0
Fix bug in writing PRIVATE subprograms to .mod file

Original-commit: flang-compiler/f18@ad443e2439
Reviewed-on: https://github.com/flang-compiler/f18/pull/523
2019-06-24 13:08:24 -07:00
Tim Keith 86132a15dc [flang] Fix bug in writing PRIVATE subprograms to .mod file
Subprograms can't have the PRIVATE prefix on them when they are defined.
So if they are private, add a private-stmt for them.

Fixes flang-compiler/f18#519

Original-commit: flang-compiler/f18@d3670aa176
Reviewed-on: https://github.com/flang-compiler/f18/pull/523
2019-06-24 12:35:17 -07:00
Steve Scalpone ba7731ec6b [flang] Merge pull request flang-compiler/f18#522 from flang-compiler/sjs-predef-mod-test
Add a set of tests which compile the predefined module files.

Original-commit: flang-compiler/f18@e50fb71914
Reviewed-on: https://github.com/flang-compiler/f18/pull/522
2019-06-24 09:58:11 -07:00
Steve Scalpone e73c886bdf [flang] Port to macOS, where mktemp doesn't have -p.
Original-commit: flang-compiler/f18@bd698aee68
Reviewed-on: https://github.com/flang-compiler/f18/pull/522
2019-06-23 17:14:19 -07:00
Steve Scalpone 10ad02ff2d [flang] Add a set of tests which compile the predefined module files. Each test simply tries to compile the module source file. Modify the script test_errors.sh to work with a source file that is specified as a full path. Also, change how the test temp directory is created to use a random name in case any of the source file base names are duplicated.
Original-commit: flang-compiler/f18@ec048ab1d5
Reviewed-on: https://github.com/flang-compiler/f18/pull/522
Tree-same-pre-rewrite: false
2019-06-23 13:30:23 -07:00
psteinfeld 11493f3123 [flang] Merge pull request flang-compiler/f18#510 from flang-compiler/ps-do-msg
Changes to improve messages for DO semantics

Original-commit: flang-compiler/f18@b89993ac7d
Reviewed-on: https://github.com/flang-compiler/f18/pull/510
2019-06-20 20:07:58 -07:00
Peter Steinfeld 6e12d0810a [flang] Changes to improve messages for DO semantics
I changed two things in the messages produced for DO semantic checks --
 - I changed the source location to be specific to where conflicting names are
 declared.
 - I added the conflicting names to the message.

Original-commit: flang-compiler/f18@f39f9ceeae
Reviewed-on: https://github.com/flang-compiler/f18/pull/510
2019-06-20 17:07:13 -07:00
Tim Keith bf73b95874 [flang] Merge pull request flang-compiler/f18#509 from flang-compiler/tsk1
Fix CHECK failure on undeclared type parameter

Original-commit: flang-compiler/f18@de95ab7ebe
Reviewed-on: https://github.com/flang-compiler/f18/pull/509
2019-06-20 16:13:38 -07:00
Tim Keith 56b0e2a759 [flang] Fix CHECK failure on undeclared type parameter
In the example below, the compiler gets an internal error when
processing the derived-type-spec for the declaration of `x`.
When the search for type parameter `k` fails it means an error
has already occurred and we should skip that parameter.

```
type :: t(k)
end type
type(t):: x
end
```

Original-commit: flang-compiler/f18@a4bf1922e5
Reviewed-on: https://github.com/flang-compiler/f18/pull/509
2019-06-20 14:23:21 -07:00
psteinfeld 90a5cdeea3 [flang] Merge pull request flang-compiler/f18#504 from flang-compiler/ps-c1123
Expressions in a DO CONCURRENT header should not reference names declared in the header

Original-commit: flang-compiler/f18@8587141832
Reviewed-on: https://github.com/flang-compiler/f18/pull/504
2019-06-20 12:45:27 -07:00
Peter Steinfeld a26fff722f [flang] Added "const" to a few declarations in response to review comments.
Original-commit: flang-compiler/f18@f93045c523
Reviewed-on: https://github.com/flang-compiler/f18/pull/504
2019-06-20 11:45:17 -07:00
Peter Steinfeld fe19b37dea [flang] These changes are in response to comments on my pull request for C1123.
Here's a summary of the changes:
 - I renamed a function to ResolveControlExpressions for clarity.
 - I changed the interface to the function to ResolveIndexName for clarity.
 - I simplified the code for walking the "step" and scalar mask expressions in
   a DO CONCURRENT control statements to not check for the presence of optional
   expressions.
 - I added "const" to the declaration of a local variable.
 - I removed some spurious comments from the test dosemantics04.f90.
 - I added two new tests to dosemantics04.f90 to verify cases that were not
   covered in my original test implementation.

Original-commit: flang-compiler/f18@fa5827061a
Reviewed-on: https://github.com/flang-compiler/f18/pull/504
Tree-same-pre-rewrite: false
2019-06-20 09:58:03 -07:00
Peter Steinfeld 88054b3491 [flang] I fixed a problem in C1123. This constraint requires that expressions in a DO
CONCURRENT header not reference names declared in the same header.  To
implement this, I changed the "Pre" function for ConcurrentHeader to walk the
subtree in an order that caused the variables associated with the declared
names to be created before any of the expressions were walked.

I added the test dosemantics04.f90 to test this.

Original-commit: flang-compiler/f18@9f3b552414
Reviewed-on: https://github.com/flang-compiler/f18/pull/504
Tree-same-pre-rewrite: false
2019-06-20 09:58:03 -07:00
Peter Klausler 596a1c6b45 [flang] Merge pull request flang-compiler/f18#508 from flang-compiler/pmk-fixes
Fix a couple bugs with SELECT TYPE(p) from regression tests

Original-commit: flang-compiler/f18@0b25c908da
Reviewed-on: https://github.com/flang-compiler/f18/pull/508
2019-06-19 16:56:31 -07:00
peter klausler daef068a0b [flang] back out -Mstandard
Original-commit: flang-compiler/f18@a040c4bdef
Reviewed-on: https://github.com/flang-compiler/f18/pull/508
2019-06-19 16:44:36 -07:00
peter klausler 9a9b450011 [flang] EQUIVALENCE numeric/character as extension with warning
Original-commit: flang-compiler/f18@0182efb759
Reviewed-on: https://github.com/flang-compiler/f18/pull/508
Tree-same-pre-rewrite: false
2019-06-19 16:34:50 -07:00
peter klausler 40b1cc9b62 [flang] Fix a couple bugs with SELECT TYPE(p) from regression tests
Original-commit: flang-compiler/f18@7539a01ecd
Reviewed-on: https://github.com/flang-compiler/f18/pull/508
Tree-same-pre-rewrite: false
2019-06-19 16:34:50 -07:00
Tim Keith cfcebc54e2 [flang] Merge pull request flang-compiler/f18#506 from flang-compiler/tsk2
Prevent .mod files from being left by tests

Original-commit: flang-compiler/f18@7810c034c8
Reviewed-on: https://github.com/flang-compiler/f18/pull/506
2019-06-19 15:01:14 -07:00
Tim Keith e9920a6861 [flang] Prevent .mod files from being left by tests
test_symbols.sh and test_folding.sh were running the compiler in the
test directory (e.g. `<build>/test/semantics`). This meant that .mod
files were being left there because they weren't cleaned up.

Change to run the compiler in the temp directory created for each test.
It is deleted at the end so files aren't left behind.

Original-commit: flang-compiler/f18@4f9735ada7
Reviewed-on: https://github.com/flang-compiler/f18/pull/506
2019-06-19 13:18:17 -07:00
Peter Klausler 73644db8aa [flang] Merge pull request flang-compiler/f18#505 from flang-compiler/pmk-not
Fix a couple things, support ALLOCATED

Original-commit: flang-compiler/f18@175cc5f8f5
Reviewed-on: https://github.com/flang-compiler/f18/pull/505
2019-06-19 13:26:28 -07:00
peter klausler cedf98c165 [flang] Remove extra semicolon
Original-commit: flang-compiler/f18@c94327b56b
Reviewed-on: https://github.com/flang-compiler/f18/pull/505
2019-06-19 12:37:49 -07:00
peter klausler 4f2c8fae65 [flang] Fix source provenance of .NOT., add ALLOCATED intrinsic
Original-commit: flang-compiler/f18@e7e0de9e0d
Reviewed-on: https://github.com/flang-compiler/f18/pull/505
Tree-same-pre-rewrite: false
2019-06-19 11:50:07 -07:00
Peter Klausler c1a9cdb34f [flang] Merge pull request flang-compiler/f18#503 from flang-compiler/pmk-fixes
Fix flang-compiler/f18#499 and flang-compiler/f18#500, enable -fno-exceptions

Original-commit: flang-compiler/f18@7cb2a0af56
Reviewed-on: https://github.com/flang-compiler/f18/pull/503
2019-06-18 16:22:31 -07:00
peter klausler b6a1fdf5e0 [flang] Force -fexceptions for real arithmetic tests
Original-commit: flang-compiler/f18@532dd3b6df
Reviewed-on: https://github.com/flang-compiler/f18/pull/503
2019-06-18 15:32:20 -07:00
peter klausler 7d24cebc17 [flang] Rearrange some move(get<>()) calls into get<>(move()) to dodge GCC possibly-uninit warnings (bogus)
Original-commit: flang-compiler/f18@f369c6025c
Reviewed-on: https://github.com/flang-compiler/f18/pull/503
Tree-same-pre-rewrite: false
2019-06-18 15:15:22 -07:00
peter klausler b3c7a79e2d [flang] -fno-exceptions
Original-commit: flang-compiler/f18@81d09c2053
Reviewed-on: https://github.com/flang-compiler/f18/pull/503
Tree-same-pre-rewrite: false
2019-06-18 14:11:55 -07:00
Peter Klausler 88f3c99f35 [flang] Merge pull request flang-compiler/f18#496 from flang-compiler/pmk-ascii
Support Latin-1 source encodings, generally clean up source character processing

Original-commit: flang-compiler/f18@7a68cf0706
Reviewed-on: https://github.com/flang-compiler/f18/pull/496
2019-06-18 14:01:11 -07:00
peter klausler f753cf3eb0 [flang] Review comments and last (?) bugs
Original-commit: flang-compiler/f18@db8302e3ab
Reviewed-on: https://github.com/flang-compiler/f18/pull/496
2019-06-18 13:46:54 -07:00