aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/parse.c
diff options
context:
space:
mode:
authorTobias Burnus <tobias@codesourcery.com>2020-11-09 16:16:44 +0100
committerTobias Burnus <tobias@codesourcery.com>2020-11-09 16:16:44 +0100
commitf27a3b37b4805feba138dd421f039e3267b1c5f0 (patch)
treea5e6f860c63718ba9d2b514c504afe18212d8960 /gcc/fortran/parse.c
parentb2b85163731e8647542f2f7561bd4c69ae5f5f2a (diff)
downloadgcc-f27a3b37b4805feba138dd421f039e3267b1c5f0.zip
gcc-f27a3b37b4805feba138dd421f039e3267b1c5f0.tar.gz
gcc-f27a3b37b4805feba138dd421f039e3267b1c5f0.tar.bz2
Fortran: Fix OpenACC in specification-part checks [PR90111]
OpenACC's routine and declare directives can appear anywhere in the specification part, i.e. before/after use-stmts, import-stmt, implicit-part, or declaration-constructs. gcc/fortran/ChangeLog: PR fortran/90111 * parse.c (case_decl): Move ST_OACC_ROUTINE and ST_OACC_DECLARE to ... (case_omp_decl): ... here. (verify_st_order): Update comment. gcc/testsuite/ChangeLog: PR fortran/90111 * gfortran.dg/goacc/specification-part.f90: New test.
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r--gcc/fortran/parse.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index e57669c..ec7abc2 100644
--- a/gcc/fortran/parse.c
+++ b/gcc/fortran/parse.c
@@ -1633,14 +1633,15 @@ next_statement (void)
#define case_decl case ST_ATTR_DECL: case ST_COMMON: case ST_DATA_DECL: \
case ST_EQUIVALENCE: case ST_NAMELIST: case ST_STATEMENT_FUNCTION: \
- case ST_TYPE: case ST_INTERFACE: case ST_PROCEDURE: case ST_OACC_ROUTINE: \
- case ST_OACC_DECLARE
+ case ST_TYPE: case ST_INTERFACE: case ST_PROCEDURE
-/* OpenMP declaration statements. */
+/* OpenMP and OpenACC declaration statements, which may appear anywhere in
+ the specification part. */
#define case_omp_decl case ST_OMP_THREADPRIVATE: case ST_OMP_DECLARE_SIMD: \
case ST_OMP_DECLARE_TARGET: case ST_OMP_DECLARE_REDUCTION: \
- case ST_OMP_REQUIRES
+ case ST_OMP_REQUIRES: case ST_OACC_ROUTINE: case ST_OACC_DECLARE
+
/* Block end statements. Errors associated with interchanging these
are detected in gfc_match_end(). */
@@ -2813,7 +2814,7 @@ verify_st_order (st_state *p, gfc_statement st, bool silent)
break;
case_omp_decl:
- /* The OpenMP directives have to be somewhere in the specification
+ /* The OpenMP/OpenACC directives have to be somewhere in the specification
part, but there are no further requirements on their ordering.
Thus don't adjust p->state, just ignore them. */
if (p->state >= ORDER_EXEC)