aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorCesar Philippidis <cesar@codesourcery.com>2018-12-09 04:48:26 -0800
committerThomas Schwinge <tschwinge@gcc.gnu.org>2018-12-09 13:48:26 +0100
commit65b5f496995864ec8d789f232ea25329fbf0bf62 (patch)
treeefbbb9d02069970db68965c00676eb20b16a7273 /gcc
parent4b195d270ca3fb13ffa0881cf0b4e92b25f7a560 (diff)
downloadgcc-65b5f496995864ec8d789f232ea25329fbf0bf62.zip
gcc-65b5f496995864ec8d789f232ea25329fbf0bf62.tar.gz
gcc-65b5f496995864ec8d789f232ea25329fbf0bf62.tar.bz2
Correct the reported line number in C++ combined OpenACC directives
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> From-SVN: r266923
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/parser.c5
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/c-c++-common/goacc/combined-directives-3.c24
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c24
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c28
-rw-r--r--gcc/testsuite/c-c++-common/goacc/loop-3.c24
7 files changed, 77 insertions, 40 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index fc22f20..672be2d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -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
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index adfe09e..8b669a8 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -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);
}
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 192a29e..6b26f6f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..77d4182
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/combined-directives-3.c
@@ -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;
+}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
index 93e1cec..0151508 100644
--- a/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
+++ b/gcc/testsuite/c-c++-common/goacc/loop-2-kernels.c
@@ -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++)
{ }
}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
index 5b1e9d7..e3e6786 100644
--- a/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
+++ b/gcc/testsuite/c-c++-common/goacc/loop-2-parallel.c
@@ -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++)
{ }
}
diff --git a/gcc/testsuite/c-c++-common/goacc/loop-3.c b/gcc/testsuite/c-c++-common/goacc/loop-3.c
index e6c3f18..ad5a4bd 100644
--- a/gcc/testsuite/c-c++-common/goacc/loop-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/loop-3.c
@@ -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++)
{ }
}