aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2020-01-29 09:39:16 +0100
committerJakub Jelinek <jakub@redhat.com>2020-01-29 09:39:16 +0100
commitaa1b56967d85bfc80d71341395f862ec2b30ca36 (patch)
treed49c903d0658da8b7edbbf0a814c2d7487425490
parent7892ff37f407ef47ee852f281a80fa0dba6a5a67 (diff)
downloadgcc-aa1b56967d85bfc80d71341395f862ec2b30ca36.zip
gcc-aa1b56967d85bfc80d71341395f862ec2b30ca36.tar.gz
gcc-aa1b56967d85bfc80d71341395f862ec2b30ca36.tar.bz2
openmp: Handle rest of EXEC_OACC_* in oacc_code_to_statement [PR93463]
As the testcase shows, some EXEC_OACC_* codes weren't handled in oacc_code_to_statement. Fixed thusly. 2020-01-29 Jakub Jelinek <jakub@redhat.com> PR fortran/93463 * openmp.c (oacc_code_to_statement): Handle EXEC_OACC_{ROUTINE,UPDATE,WAIT,CACHE,{ENTER,EXIT}_DATA,DECLARE}. * gfortran.dg/goacc/pr93463.f90: New test.
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/openmp.c14
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr93463.f9015
4 files changed, 40 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 0033246..12e5996 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/93463
+ * openmp.c (oacc_code_to_statement): Handle
+ EXEC_OACC_{ROUTINE,UPDATE,WAIT,CACHE,{ENTER,EXIT}_DATA,DECLARE}.
+
2020-01-28 Andrew Benson <abensonca@gmail.com>
PR fortran/93461
diff --git a/gcc/fortran/openmp.c b/gcc/fortran/openmp.c
index 0accb18..b885e86 100644
--- a/gcc/fortran/openmp.c
+++ b/gcc/fortran/openmp.c
@@ -6021,6 +6021,20 @@ oacc_code_to_statement (gfc_code *code)
return ST_OACC_LOOP;
case EXEC_OACC_ATOMIC:
return ST_OACC_ATOMIC;
+ case EXEC_OACC_ROUTINE:
+ return ST_OACC_ROUTINE;
+ case EXEC_OACC_UPDATE:
+ return ST_OACC_UPDATE;
+ case EXEC_OACC_WAIT:
+ return ST_OACC_WAIT;
+ case EXEC_OACC_CACHE:
+ return ST_OACC_CACHE;
+ case EXEC_OACC_ENTER_DATA:
+ return ST_OACC_ENTER_DATA;
+ case EXEC_OACC_EXIT_DATA:
+ return ST_OACC_EXIT_DATA;
+ case EXEC_OACC_DECLARE:
+ return ST_OACC_DECLARE;
default:
gcc_unreachable ();
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a4a775d..d13de9a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2020-01-29 Jakub Jelinek <jakub@redhat.com>
+
+ PR fortran/93463
+ * gfortran.dg/goacc/pr93463.f90: New test.
+
2020-01-29 Richard Biener <rguenther@suse.de>
PR tree-optimization/93428
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr93463.f90 b/gcc/testsuite/gfortran.dg/goacc/pr93463.f90
new file mode 100644
index 0000000..920892f
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/pr93463.f90
@@ -0,0 +1,15 @@
+! PR fortran/93463
+! { dg-do compile { target fopenmp } }
+! { dg-additional-options "-fopenmp" }
+
+program pr93463
+ integer :: i, x, y, z
+ !$omp parallel do
+ do i = 1, 4
+ !$acc enter data create(x) ! { dg-error "ACC ENTER DATA directive cannot be specified within" }
+ !$acc exit data copyout(x) ! { dg-error "ACC EXIT DATA directive cannot be specified within" }
+ !$acc cache(y) ! { dg-error "ACC CACHE directive cannot be specified within" }
+ !$acc wait(1) ! { dg-error "ACC WAIT directive cannot be specified within" }
+ !$acc update self(z) ! { dg-error "ACC UPDATE directive cannot be specified within" }
+ end do
+end