]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Correct the reported line number in C++ combined OpenACC directives
authortschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2018 12:48:26 +0000 (12:48 +0000)
committertschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 9 Dec 2018 12:48:26 +0000 (12:48 +0000)
The C++ FE doesn't set the expr_location of the split acc loop in combined acc
parallel/kernels loop directives. This only happens for with combined
directives, otherwise cp_parser_omp_construct would be responsible for setting
the location. After fixing this bug, I was able to resolve a couple of long
standing diagnostics discrepancies between the C/C++ FEs in the test suite.

gcc/cp/
* parser.c (cp_parser_oacc_kernels_parallel): Adjust EXPR_LOCATION
on the combined acc loop.
gcc/testsuite/
* c-c++-common/goacc/combined-directives-3.c: New test.
* c-c++-common/goacc/loop-2-kernels.c (void K): Adjust test.
* c-c++-common/goacc/loop-2-parallel.c (void P): Adjust test.
* c-c++-common/goacc/loop-3.c (void p2): Adjust test.

Reviewed-by: Thomas Schwinge <thomas@codesourcery.com>
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@266923 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/combined-directives-3.c [new file with mode: 0644]
gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
gcc/testsuite/c-c++-common/goacc/loop-3.c

index fc22f206606b97794afd54107b71a8f81d96bc2b..672be2d072db15c4851b3e60c5e15a4942a9b7dc 100644 (file)
@@ -1,3 +1,8 @@
+2018-12-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * parser.c (cp_parser_oacc_kernels_parallel): Adjust EXPR_LOCATION
+       on the combined acc loop.
+
 2018-12-07  Paolo Carlini  <paolo.carlini@oracle.com>
 
        * decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages
index adfe09e494dcb34941d1d2def6edde82d400eefa..8b669a82b14719ee662176b7f3452d32952aa117 100644 (file)
@@ -38742,8 +38742,9 @@ cp_parser_oacc_kernels_parallel (cp_parser *parser, cp_token *pragma_tok,
          cp_lexer_consume_token (parser->lexer);
          tree block = begin_omp_parallel ();
          tree clauses;
-         cp_parser_oacc_loop (parser, pragma_tok, p_name, mask, &clauses,
-                              if_p);
+         tree stmt = cp_parser_oacc_loop (parser, pragma_tok, p_name, mask,
+                                          &clauses, if_p);
+         protected_set_expr_location (stmt, pragma_tok->location);
          return finish_omp_construct (code, block, clauses);
        }
     }
index 192a29ee971cdff0276db2ea3d962989fb6f53ce..6b26f6f510dbc42ccc84caf0879ab10f1ff98180 100644 (file)
@@ -1,3 +1,10 @@
+2018-12-09  Cesar Philippidis  <cesar@codesourcery.com>
+
+       * c-c++-common/goacc/combined-directives-3.c: New test.
+       * c-c++-common/goacc/loop-2-kernels.c (void K): Adjust test.
+       * c-c++-common/goacc/loop-2-parallel.c (void P): Adjust test.
+       * c-c++-common/goacc/loop-3.c (void p2): Adjust test.
+
 2018-12-09  Thomas Schwinge  <thomas@codesourcery.com>
 
        * gfortran.dg/goacc/loop-2-kernels.f95: Update.
diff --git a/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c b/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c
new file mode 100644 (file)
index 0000000..77d4182
--- /dev/null
@@ -0,0 +1,24 @@
+/* Verify the accuracy of the line number associated with combined
+   constructs.  */
+
+int
+main ()
+{
+  int x, y, z;
+
+#pragma acc parallel loop seq auto /* { dg-error "'seq' overrides other OpenACC loop specifiers" } */
+  for (x = 0; x < 10; x++)
+#pragma acc loop
+    for (y = 0; y < 10; y++)
+      ;
+
+#pragma acc parallel loop gang auto /* { dg-error "'auto' conflicts with other OpenACC loop specifiers" } */
+  for (x = 0; x < 10; x++)
+#pragma acc loop worker auto /* { dg-error "'auto' conflicts with other OpenACC loop specifiers" } */
+    for (y = 0; y < 10; y++)
+#pragma acc loop vector
+      for (z = 0; z < 10; z++)
+       ;
+
+  return 0;
+}
index 93e1cece26b4c270e5070c0cfb6228c257f45514..01515089a7d8baf7ec3b9dc81402cf41f1af4b40 100644 (file)
@@ -147,8 +147,8 @@ void K(void)
 #pragma acc kernels loop worker(num:5)
   for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
 #pragma acc kernels loop gang worker
   for (i = 0; i < 10; i++)
@@ -163,8 +163,8 @@ void K(void)
 #pragma acc kernels loop vector(length:5)
   for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
 #pragma acc kernels loop gang vector
   for (i = 0; i < 10; i++)
@@ -176,16 +176,16 @@ void K(void)
 #pragma acc kernels loop auto
   for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
 }
index 5b1e9d7ce87f0c4c9039810884aa3efe2b69d7f0..e3e6786e572c6f862019a338ffb296dddb416fb1 100644 (file)
@@ -117,16 +117,16 @@ void P(void)
   for (i = 0; i < 10; i++)
     { }
 
-#pragma acc parallel loop seq gang // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc parallel loop seq gang // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
 
 #pragma acc parallel loop worker
   for (i = 0; i < 10; i++)
     { }
 
-#pragma acc parallel loop seq worker // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc parallel loop seq worker // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
 #pragma acc parallel loop gang worker
   for (i = 0; i < 10; i++)
@@ -136,8 +136,8 @@ void P(void)
   for (i = 0; i < 10; i++)
     { }
 
-#pragma acc parallel loop seq vector // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc parallel loop seq vector // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
 #pragma acc parallel loop gang vector
   for (i = 0; i < 10; i++)
@@ -149,16 +149,16 @@ void P(void)
 #pragma acc parallel loop auto
   for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop seq auto // { dg-error "'seq' overrides" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } }
+#pragma acc parallel loop seq auto // { dg-error "'seq' overrides" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } }
+#pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" }
+  for (i = 0; i < 10; i++)
     { }
 }
index e6c3f18042e6a0a17f0ca25f7840e1e85ba7e165..ad5a4bd5aa9acec1185fdd58fdf621b769c31a60 100644 (file)
@@ -37,24 +37,24 @@ void p2 (void)
 {
   int i, j;
 
-#pragma acc parallel loop gang(5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop gang(5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop gang(num:5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop gang(num:5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
 
-#pragma acc parallel loop worker(5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop worker(5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop worker(num:5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop worker(num:5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
 
-#pragma acc parallel loop vector(5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop vector(5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
-#pragma acc parallel loop vector(length:5) // { dg-error "argument not permitted" "" { target c } }
-  for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } }
+#pragma acc parallel loop vector(length:5) // { dg-error "argument not permitted" }
+  for (i = 0; i < 10; i++)
     { }
 }