]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
openmp: Adjust diagnostics about same variable in link and to/enter clauses
authorJakub Jelinek <jakub@redhat.com>
Tue, 5 Jul 2022 07:29:23 +0000 (09:29 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Tue, 5 Jul 2022 07:47:18 +0000 (09:47 +0200)
On Fri, May 27, 2022 at 04:52:17PM +0200, Tobias Burnus wrote:
> The 'TO'/'ENTER' usage is first stored in a linked list – and
> then as attribute to the symbol. I am not sure how to handle it best.

This reminds me I've left the C/C++ FE diagnostics about mixing link and
to/enter on the same variable in separate directives as is, so it always
talked about mixing link and to clauses.

This patch adjusts it, so that if link is first, it talks about the
clause actually used and if link is later, uses to or enter together
in the wording.

2022-05-28  Jakub Jelinek  <jakub@redhat.com>

gcc/c/
* c-parser.cc (c_parser_omp_declare_target): If OMP_CLAUSE_LINK was
seen first, use "%<to%>" or "%<enter%>" depending on
OMP_CLAUSE_ENTER_TO of the current clause, otherwise use
"%<to%> or %<enter%>" wording.
gcc/cp/
* parser.cc (handle_omp_declare_target_clause): If OMP_CLAUSE_LINK was
seen first, use "%<to%>" or "%<enter%>" depending on
OMP_CLAUSE_ENTER_TO of the current clause, otherwise use
"%<to%> or %<enter%>" wording.
gcc/testsuite/
* c-c++-common/gomp/declare-target-2.c: Add further tests for mixing of
link and to/enter clauses on separate directives.

(cherry picked from commit 931249276acb4bdab778fe2bf4e81a1a31a78e6c)

gcc/c/ChangeLog.omp
gcc/c/c-parser.cc
gcc/cp/ChangeLog.omp
gcc/cp/parser.cc
gcc/testsuite/ChangeLog.omp
gcc/testsuite/c-c++-common/gomp/declare-target-2.c

index 9deef6d31b5628ab07793a7959357dfd4777c925..667e2b4bcac50d9d53fb7ef4e55fe846ecc55362 100644 (file)
@@ -1,3 +1,13 @@
+2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-05-28  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-parser.cc (c_parser_omp_declare_target): If OMP_CLAUSE_LINK was
+       seen first, use "%<to%>" or "%<enter%>" depending on
+       OMP_CLAUSE_ENTER_TO of the current clause, otherwise use
+       "%<to%> or %<enter%>" wording.
+
 2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index 44f222800b7d7791839f30da4815ef18f6227cb2..b01ebdb3cda9c4b5e473096e33afb0f851c979b2 100644 (file)
@@ -22359,9 +22359,14 @@ c_parser_omp_declare_target (c_parser *parser)
        id = get_identifier ("omp declare target");
       if (at2)
        {
-         error_at (OMP_CLAUSE_LOCATION (c),
-                   "%qD specified both in declare target %<link%> and %<to%>"
-                   " clauses", t);
+         if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
+           error_at (OMP_CLAUSE_LOCATION (c),
+                     "%qD specified both in declare target %<link%> and %qs"
+                     " clauses", t, OMP_CLAUSE_ENTER_TO (c) ? "to" : "enter");
+         else
+           error_at (OMP_CLAUSE_LOCATION (c),
+                     "%qD specified both in declare target %<link%> and "
+                     "%<to%> or %<enter%> clauses", t);
          continue;
        }
       if (!at1)
index a2122a223f5aed940e99f68702bb65cd8b973dfe..453d3e1ffb9eebcb7f24438a2028daf568be4d62 100644 (file)
@@ -1,3 +1,13 @@
+2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-05-28  Jakub Jelinek  <jakub@redhat.com>
+
+       * parser.cc (handle_omp_declare_target_clause): If OMP_CLAUSE_LINK was
+       seen first, use "%<to%>" or "%<enter%>" depending on
+       OMP_CLAUSE_ENTER_TO of the current clause, otherwise use
+       "%<to%> or %<enter%>" wording.
+
 2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index dc3bea50eafbb112c44320772079231d484d086a..7389cbe9fdfc25b7774d8e917a7875e7ba9dedbf 100644 (file)
@@ -46151,9 +46151,14 @@ handle_omp_declare_target_clause (tree c, tree t, int device_type)
     id = get_identifier ("omp declare target");
   if (at2)
     {
-      error_at (OMP_CLAUSE_LOCATION (c),
-               "%qD specified both in declare target %<link%> and %<to%>"
-               " clauses", t);
+      if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_ENTER)
+       error_at (OMP_CLAUSE_LOCATION (c),
+                 "%qD specified both in declare target %<link%> and %qs"
+                 " clauses", t, OMP_CLAUSE_ENTER_TO (c) ? "to" : "enter");
+      else
+       error_at (OMP_CLAUSE_LOCATION (c),
+                 "%qD specified both in declare target %<link%> and "
+                 "%<to%> or %<enter%> clauses", t);
       return false;
     }
   if (!at1)
index f3ce282c15ddb38abd33f428deff1f646233f5cc..34eb1e780f352e1f1a1e4f2c101626ddbd634dcb 100644 (file)
@@ -1,3 +1,11 @@
+2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
+
+       Backport from mainline:
+       2022-05-28  Jakub Jelinek  <jakub@redhat.com>
+
+       * c-c++-common/gomp/declare-target-2.c: Add further tests for mixing of
+       link and to/enter clauses on separate directives.
+
 2022-07-05  Tobias Burnus  <tobias@codesourcery.com>
 
        Backport from mainline:
index 44fb14daf87ec4233d379f2199318c80c104c3d8..97602dc799240f8928675625efb22405b9e6689e 100644 (file)
@@ -10,7 +10,22 @@ int b;
 #pragma omp declare target enter (b) link (b)  /* { dg-error "appears more than once on the same .declare target. directive" } */
 int c;
 #pragma omp declare target (c)
-#pragma omp declare target link (c)            /* { dg-error "specified both in declare target" } */
+#pragma omp declare target link (c)            /* { dg-error "specified both in declare target 'link' and 'to' or 'enter' clauses" } */
+int c2;
+#pragma omp declare target to (c2)
+#pragma omp declare target link (c2)           /* { dg-error "specified both in declare target 'link' and 'to' or 'enter' clauses" } */
+int c3;
+#pragma omp declare target enter (c3)
+#pragma omp declare target link (c3)           /* { dg-error "specified both in declare target 'link' and 'to' or 'enter' clauses" } */
+int c4;
+#pragma omp declare target link (c4)
+#pragma omp declare target (c4)                        /* { dg-error "specified both in declare target 'link' and 'enter' clauses" } */
+int c5;
+#pragma omp declare target link (c5)
+#pragma omp declare target to (c5)             /* { dg-error "specified both in declare target 'link' and 'to' clauses" } */
+int c6;
+#pragma omp declare target link (c6)
+#pragma omp declare target enter (c6)          /* { dg-error "specified both in declare target 'link' and 'enter' clauses" } */
 int foo (void);
 #pragma omp declare target link (foo)          /* { dg-error "is not a variable in clause" } */
 struct S;