* [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables
@ 2019-06-18 22:26 Thomas Schwinge
2023-12-19 11:20 ` Unify OpenACC/C and C++ behavior re duplicate OpenACC 'declare' directives for 'extern' variables [PR90868] (was: [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables) Thomas Schwinge
0 siblings, 1 reply; 2+ messages in thread
From: Thomas Schwinge @ 2019-06-18 22:26 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1.1: Type: text/plain, Size: 206 bytes --]
Hi!
This doesn't resolve PR90868, but at least in trunk r272445 we now
"Document status quo for duplicate OpenACC 'declare' directives for
'extern' variables", see attached.
Grüße
Thomas
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: 0001-PR90868-Document-status-quo-for-duplicate-Open.trunk.patch --]
[-- Type: text/x-diff, Size: 7082 bytes --]
From 267951437cde77a09e62d9c151002eeed3cf457c Mon Sep 17 00:00:00 2001
From: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 18 Jun 2019 22:14:04 +0000
Subject: [PATCH] [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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@272445 138bc75d-0d04-0410-961f-82ee72b054a4
---
gcc/testsuite/ChangeLog | 4 +
gcc/testsuite/c-c++-common/goacc/declare-1.c | 85 ++++++++++++++++-
gcc/testsuite/c-c++-common/goacc/declare-2.c | 99 ++++++++++++++++++++
3 files changed, 187 insertions(+), 1 deletion(-)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 473fd66d39fd..981055838ab6 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 7c4380f4f041..46ee01b67595 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 af43b6bc8162..e2e22be57e9e 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
--
2.20.1
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 658 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Unify OpenACC/C and C++ behavior re duplicate OpenACC 'declare' directives for 'extern' variables [PR90868] (was: [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables)
2019-06-18 22:26 [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables Thomas Schwinge
@ 2023-12-19 11:20 ` Thomas Schwinge
0 siblings, 0 replies; 2+ messages in thread
From: Thomas Schwinge @ 2023-12-19 11:20 UTC (permalink / raw)
To: gcc-patches
[-- Attachment #1: Type: text/plain, Size: 1933 bytes --]
Hi!
On 2019-06-19T00:25:49+0200, I wrote:
> This doesn't resolve PR90868, but at least in trunk r272445 we now
> "Document status quo for duplicate OpenACC 'declare' directives for
> 'extern' variables", see attached.
> --- a/gcc/testsuite/c-c++-common/goacc/declare-1.c
> +++ b/gcc/testsuite/c-c++-common/goacc/declare-1.c
> +/* The same as 'f'. */
> +
> +void
> +f_2 (void)
> +{
> +#ifndef __cplusplus
> + /* TODO PR90868
> +
> + C: "error: variable '[...]' used more than once with '#pragma acc declare'". */
> +#else
> + extern int ve0;
> +#pragma acc declare create(ve0)
> /* 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)
Pushed to master branch commit cf840a7f7c14242ab7018071310851486a557d4f
"Unify OpenACC/C and C++ behavior re duplicate OpenACC 'declare' directives for 'extern' variables [PR90868]",
see attached.
Later we'll have to check how changes like
commit 4e62aca0e0520e4ed2532f2d8153581190621c1a
"c++: block-scope externs get an alias [PR95677,PR31775,PR95677]",
commit db3d7270b42fe27fb05664c4fdf524ab7ad13a75
"openmp: Fix up declare target handling for vars with DECL_LOCAL_DECL_ALIAS [PR102640]"
(and possibly others) actually apply to OpenACC 'declare'.
Grüße
Thomas
-----------------
Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Unify-OpenACC-C-and-C-behavior-re-duplicate-OpenACC-.patch --]
[-- Type: text/x-diff, Size: 7716 bytes --]
From cf840a7f7c14242ab7018071310851486a557d4f Mon Sep 17 00:00:00 2001
From: Thomas Schwinge <thomas@codesourcery.com>
Date: Mon, 18 Dec 2023 17:25:17 +0100
Subject: [PATCH] Unify OpenACC/C and C++ behavior re duplicate OpenACC
'declare' directives for 'extern' variables [PR90868]
This likely still isn't what OpenACC actually intends (addressing that is for
another day), but at least we now misbehave consistently for C and C++.
PR c++/90868
gcc/cp/
* parser.cc (cp_parser_oacc_declare): For "more than once", check
the DECL that we're actually setting the attribute on.
gcc/testsuite/
* c-c++-common/goacc/declare-1.c: Adjust.
* c-c++-common/goacc/declare-2.c: Likewise.
---
gcc/cp/parser.cc | 23 +++++++------
gcc/testsuite/c-c++-common/goacc/declare-1.c | 9 +++---
gcc/testsuite/c-c++-common/goacc/declare-2.c | 34 ++++++++------------
3 files changed, 29 insertions(+), 37 deletions(-)
diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
index e4fbab1bab5..1e2d520345b 100644
--- a/gcc/cp/parser.cc
+++ b/gcc/cp/parser.cc
@@ -46962,20 +46962,8 @@ cp_parser_oacc_declare (cp_parser *parser, cp_token *pragma_tok)
continue;
}
- if (lookup_attribute ("omp declare target", DECL_ATTRIBUTES (decl))
- || lookup_attribute ("omp declare target link",
- DECL_ATTRIBUTES (decl)))
- {
- error_at (loc, "variable %qD used more than once with "
- "%<#pragma acc declare%>", decl);
- error = true;
- continue;
- }
-
if (!error)
{
- tree id;
-
if (DECL_LOCAL_DECL_P (decl))
/* We need to mark the aliased decl, as that is the entity
that is being referred to. This won't work for
@@ -46987,6 +46975,17 @@ cp_parser_oacc_declare (cp_parser *parser, cp_token *pragma_tok)
if (alias != error_mark_node)
decl = alias;
+ if (lookup_attribute ("omp declare target", DECL_ATTRIBUTES (decl))
+ || lookup_attribute ("omp declare target link",
+ DECL_ATTRIBUTES (decl)))
+ {
+ error_at (loc, "variable %qD used more than once with "
+ "%<#pragma acc declare%>", decl);
+ error = true;
+ continue;
+ }
+
+ tree id;
if (OMP_CLAUSE_MAP_KIND (t) == GOMP_MAP_LINK)
id = get_identifier ("omp declare target link");
else
diff --git a/gcc/testsuite/c-c++-common/goacc/declare-1.c b/gcc/testsuite/c-c++-common/goacc/declare-1.c
index 46ee01b6759..808dc2ac818 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-1.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-1.c
@@ -113,11 +113,11 @@ f_2 (void)
int va3;
#pragma acc declare device_resident(va3)
-#ifndef __cplusplus
+#if 0
/* TODO PR90868
- C: "error: variable '[...]' used more than once with '#pragma acc declare'". */
-#else
+ "error: variable '[...]' used more than once with '#pragma acc declare'". */
+
extern int ve0;
#pragma acc declare create(ve0)
@@ -196,8 +196,7 @@ f_data (void)
#if 0
/* TODO PR90868
- C: "error: variable '[...]' used more than once with '#pragma acc declare'".
- C++: ICE during gimplification. */
+ "error: variable '[...]' used more than once with '#pragma acc declare'". */
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 e2e22be57e9..35e45004561 100644
--- a/gcc/testsuite/c-c++-common/goacc/declare-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/declare-2.c
@@ -137,61 +137,55 @@ 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 } } */
+#pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" } */
extern int we1;
-#pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" } */
extern int *we2;
-#pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" } */
extern int we3;
-#pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" } */
extern int we4;
-#pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" } */
extern int we5;
-#pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" } */
extern int we6;
-#pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */
+#pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" } */
}
/* 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 } } */
+# pragma acc declare create(we0) /* { dg-error "variable 'we0' used more than once with '#pragma acc declare'" } */
extern int we1;
-# pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare copyin(we1) /* { dg-error "variable 'we1' used more than once with '#pragma acc declare'" } */
extern int *we2;
-# pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare deviceptr(we2) /* { dg-error "variable 'we2' used more than once with '#pragma acc declare'" } */
extern int we3;
-# pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare device_resident(we3) /* { dg-error "variable 'we3' used more than once with '#pragma acc declare'" } */
extern int we4;
-# pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare link(we4) /* { dg-error "variable 'we4' used more than once with '#pragma acc declare'" } */
extern int we5;
-# pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare present_or_copyin(we5) /* { dg-error "variable 'we5' used more than once with '#pragma acc declare'" } */
extern int we6;
-# pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" "" { target c } } */
+# pragma acc declare present_or_create(we6) /* { dg-error "variable 'we6' used more than once with '#pragma acc declare'" } */
}
}
-#endif
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-12-19 11:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-06-18 22:26 [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables Thomas Schwinge
2023-12-19 11:20 ` Unify OpenACC/C and C++ behavior re duplicate OpenACC 'declare' directives for 'extern' variables [PR90868] (was: [committed] [PR90868] Document status quo for duplicate OpenACC 'declare' directives for 'extern' variables) Thomas Schwinge
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).