aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2019-06-19 00:13:54 +0200
committerThomas Schwinge <tschwinge@gcc.gnu.org>2019-06-19 00:13:54 +0200
commit3a37d6f68c50d38303cf04039f79fc65e72d5a27 (patch)
tree6ad78acf990e5a9e6427ec88b9d7d916e7409d9d /gcc
parentab2c347c358036f017003ab7c1043705c6482a8c (diff)
downloadgcc-3a37d6f68c50d38303cf04039f79fc65e72d5a27.zip
gcc-3a37d6f68c50d38303cf04039f79fc65e72d5a27.tar.gz
gcc-3a37d6f68c50d38303cf04039f79fc65e72d5a27.tar.bz2
[PR90862] OpenACC 'declare' ICE when nested inside another construct
gcc/ PR middle-end/90862 * omp-low.c (check_omp_nesting_restrictions): Handle GF_OMP_TARGET_KIND_OACC_DECLARE. gcc/testsuite/ PR middle-end/90862 * c-c++-common/goacc/declare-1.c: Update. * c-c++-common/goacc/declare-2.c: Likewise. libgomp/ PR middle-end/90862 * testsuite/libgomp.oacc-c-c++-common/declare-1.c: Update. From-SVN: r272444
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/omp-low.c1
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/c-c++-common/goacc/declare-1.c82
-rw-r--r--gcc/testsuite/c-c++-common/goacc/declare-2.c35
5 files changed, 126 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cbf6915..43a0a23 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2019-06-18 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR middle-end/90862
+ * omp-low.c (check_omp_nesting_restrictions): Handle
+ GF_OMP_TARGET_KIND_OACC_DECLARE.
+
2019-06-18 Uroš Bizjak <ubizjak@gmail.com>
* config/i386/i386.md (@cmp<mode>_1): Rename from cmp<mode>_1.
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 9df21a4..b0f1d94 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -3119,6 +3119,7 @@ check_omp_nesting_restrictions (gimple *stmt, omp_context *ctx)
case GF_OMP_TARGET_KIND_OACC_UPDATE: stmt_name = "update"; break;
case GF_OMP_TARGET_KIND_OACC_ENTER_EXIT_DATA:
stmt_name = "enter/exit data"; break;
+ case GF_OMP_TARGET_KIND_OACC_DECLARE: stmt_name = "declare"; break;
case GF_OMP_TARGET_KIND_OACC_HOST_DATA: stmt_name = "host_data";
break;
default: gcc_unreachable ();
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 2848d2c..473fd66 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2019-06-18 Thomas Schwinge <thomas@codesourcery.com>
+
+ PR middle-end/90862
+ * c-c++-common/goacc/declare-1.c: Update.
+ * c-c++-common/goacc/declare-2.c: Likewise.
+
2019-06-18 Marek Polacek <polacek@redhat.com>
PR c++/84698
diff --git a/gcc/testsuite/c-c++-common/goacc/declare-1.c b/gcc/testsuite/c-c++-common/goacc/declare-1.c
index 35b1ccd..7c4380f 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-1.c
@@ -1,5 +1,5 @@
-/* Test valid uses of declare directive. */
-/* { dg-do compile } */
+/* Test valid use of the OpenACC 'declare' directive. */
+
int v0;
#pragma acc declare create(v0)
@@ -25,6 +25,7 @@ int v9;
int v10;
#pragma acc declare present_or_create(v10)
+
void
f (void)
{
@@ -93,3 +94,80 @@ f (void)
}
b:;
}
+
+
+/* The same as 'f' but everything contained in an OpenACC 'data' construct. */
+
+void
+f_data (void)
+{
+#pragma acc data
+ {
+ int va0;
+# pragma acc declare create(va0)
+
+ int va1;
+# pragma acc declare copyin(va1)
+
+ int *va2;
+# pragma acc declare deviceptr(va2)
+
+ int va3;
+# pragma acc declare device_resident(va3)
+
+#if 0 /* TODO */
+ extern int ve0;
+# pragma acc declare create(ve0)
+
+ extern int ve1;
+# pragma acc declare copyin(ve1)
+
+ extern int *ve2;
+# pragma acc declare deviceptr(ve2)
+
+ extern int ve3;
+# pragma acc declare device_resident(ve3)
+
+ extern int ve4;
+# pragma acc declare link(ve4)
+
+ extern int ve5;
+# pragma acc declare present_or_copyin(ve5)
+
+ extern int ve6;
+# pragma acc declare present_or_create(ve6)
+#endif
+
+ int va5;
+# pragma acc declare copy(va5)
+
+ int va6;
+# pragma acc declare copyout(va6)
+
+ int va7;
+# pragma acc declare present(va7)
+
+ int va8;
+# pragma acc declare present_or_copy(va8)
+
+ int va9;
+# pragma acc declare present_or_copyin(va9)
+
+ int va10;
+# pragma acc declare present_or_copyout(va10)
+
+ int va11;
+# pragma acc declare present_or_create(va11)
+
+ a:
+ {
+ int va0;
+# pragma acc declare create(va0)
+ if (v1)
+ goto a;
+ else
+ goto b;
+ }
+ b:;
+ }
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/declare-2.c b/gcc/testsuite/c-c++-common/goacc/declare-2.c
index 33b8245..af43b6b 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-2.c
@@ -1,5 +1,5 @@
-/* Test invalid uses of declare directive. */
-/* { dg-do compile } */
+/* Test invalid use of the OpenACC 'declare' directive. */
+
#pragma acc declare /* { dg-error "no valid clauses" } */
@@ -42,6 +42,7 @@ int va11;
int va12;
#pragma acc declare create (va12) link (va12) /* { dg-error "more than once" } */
+
void
f (void)
{
@@ -65,3 +66,33 @@ f (void)
#pragma acc declare present (v2) /* { dg-error "invalid use of" } */
}
+
+
+/* The same as 'f' but everything contained in an OpenACC 'data' construct. */
+
+void
+f_data (void)
+{
+#pragma acc data
+ {
+ int va0;
+# pragma acc declare link(va0) /* { dg-error "global variable" } */
+
+ extern int ve0;
+# pragma acc declare copy(ve0) /* { dg-error "invalid use of" } */
+
+ extern int ve1;
+# pragma acc declare copyout(ve1) /* { dg-error "invalid use of" } */
+
+ extern int ve2;
+# pragma acc declare present(ve2) /* { dg-error "invalid use of" } */
+
+ extern int ve3;
+# pragma acc declare present_or_copy(ve3) /* { dg-error "invalid use of" } */
+
+ extern int ve4;
+# pragma acc declare present_or_copyout(ve4) /* { dg-error "invalid use of" } */
+
+# pragma acc declare present (v2) /* { dg-error "invalid use of" } */
+ }
+}