aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Schwinge <thomas@codesourcery.com>2019-06-19 00:14:04 +0200
committerThomas Schwinge <tschwinge@gcc.gnu.org>2019-06-19 00:14:04 +0200
commit5c9c7e19e63e0a6d9ed9e51601b4221f2fed5b13 (patch)
tree1d4035fbdc8570412b80a66d09ea1a2ebf7ef4a5
parent3a37d6f68c50d38303cf04039f79fc65e72d5a27 (diff)
downloadgcc-5c9c7e19e63e0a6d9ed9e51601b4221f2fed5b13.zip
gcc-5c9c7e19e63e0a6d9ed9e51601b4221f2fed5b13.tar.gz
gcc-5c9c7e19e63e0a6d9ed9e51601b4221f2fed5b13.tar.bz2
[PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables
gcc/testsuite/ PR testsuite/90868 * c-c++-common/goacc/declare-1.c: Update. * c-c++-common/goacc/declare-2.c: Likewise. From-SVN: r272445
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/c-c++-common/goacc/declare-1.c85
-rw-r--r--gcc/testsuite/c-c++-common/goacc/declare-2.c99
3 files changed, 187 insertions, 1 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 473fd66..9810558 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,9 @@
2019-06-18 Thomas Schwinge <thomas@codesourcery.com>
+ PR testsuite/90868
+ * c-c++-common/goacc/declare-1.c: Update.
+ * c-c++-common/goacc/declare-2.c: Likewise.
+
PR middle-end/90862
* c-c++-common/goacc/declare-1.c: Update.
* c-c++-common/goacc/declare-2.c: Likewise.
diff --git a/gcc/testsuite/c-c++-common/goacc/declare-1.c b/gcc/testsuite/c-c++-common/goacc/declare-1.c
index 7c4380f..46ee01b 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-1.c
@@ -96,6 +96,84 @@ f (void)
}
+/* The same as 'f'. */
+
+void
+f_2 (void)
+{
+ 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)
+
+#ifndef __cplusplus
+ /* TODO PR90868
+
+ C: "error: variable '[...]' used more than once with '#pragma acc declare'". */
+#else
+ 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:;
+}
+
+
/* The same as 'f' but everything contained in an OpenACC 'data' construct. */
void
@@ -115,7 +193,12 @@ f_data (void)
int va3;
# pragma acc declare device_resident(va3)
-#if 0 /* TODO */
+#if 0
+ /* TODO PR90868
+
+ C: "error: variable '[...]' used more than once with '#pragma acc declare'".
+ C++: ICE during gimplification. */
+
extern int ve0;
# pragma acc declare create(ve0)
diff --git a/gcc/testsuite/c-c++-common/goacc/declare-2.c b/gcc/testsuite/c-c++-common/goacc/declare-2.c
index af43b6b..e2e22be 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-2.c
@@ -96,3 +96,102 @@ f_data (void)
# pragma acc declare present (v2) /* { dg-error "invalid use of" } */
}
}
+
+
+/* Testing for PR90868 "Duplicate OpenACC 'declare' directives for 'extern'
+ variables". */
+
+
+void
+f_pr90868 (void)
+{
+ extern int we0;
+#pragma acc declare create(we0)
+
+ extern int we1;
+#pragma acc declare copyin(we1)
+
+ extern int *we2;
+#pragma acc declare deviceptr(we2)
+
+ extern int we3;
+#pragma acc declare device_resident(we3)
+
+ extern int we4;
+#pragma acc declare link(we4)
+
+ extern int we5;
+#pragma acc declare present_or_copyin(we5)
+
+ extern int we6;
+#pragma acc declare present_or_create(we6)
+}
+
+
+/* The same as 'f_pr90868'. */
+
+/* The errors are emitted for C only; for C++, the duplicate OpenACC 'declare'
+ directives for 'extern' variables are accepted. */
+
+void
+f_pr90868_2 (void)
+{
+ extern int we0;
+#pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we1;
+#pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int *we2;
+#pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we3;
+#pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we4;
+#pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we5;
+#pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we6;
+#pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */
+}
+
+
+/* The same as 'f_pr90868' but everything contained in an OpenACC 'data'
+ construct. */
+
+#ifdef __cplusplus
+/* TODO PR90868
+
+ C++: ICE during gimplification. */
+#else
+void
+f_pr90868_data (void)
+{
+#pragma acc data
+ {
+ extern int we0;
+# pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we1;
+# pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int *we2;
+# pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we3;
+# pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we4;
+# pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we5;
+# pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */
+
+ extern int we6;
+# pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */
+ }
+}
+#endif