Commit 65b5f496 by Cesar Philippidis Committed by Thomas Schwinge

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
parent 4b195d27
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> 2018-12-07 Paolo Carlini <paolo.carlini@oracle.com>
* decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages * decl2.c (grokbitfield): Use DECL_SOURCE_LOCATION in error messages
......
...@@ -38742,8 +38742,9 @@ cp_parser_oacc_kernels_parallel (cp_parser *parser, cp_token *pragma_tok, ...@@ -38742,8 +38742,9 @@ cp_parser_oacc_kernels_parallel (cp_parser *parser, cp_token *pragma_tok,
cp_lexer_consume_token (parser->lexer); cp_lexer_consume_token (parser->lexer);
tree block = begin_omp_parallel (); tree block = begin_omp_parallel ();
tree clauses; tree clauses;
cp_parser_oacc_loop (parser, pragma_tok, p_name, mask, &clauses, tree stmt = cp_parser_oacc_loop (parser, pragma_tok, p_name, mask,
if_p); &clauses, if_p);
protected_set_expr_location (stmt, pragma_tok->location);
return finish_omp_construct (code, block, clauses); return finish_omp_construct (code, block, clauses);
} }
} }
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> 2018-12-09 Thomas Schwinge <thomas@codesourcery.com>
* gfortran.dg/goacc/loop-2-kernels.f95: Update. * gfortran.dg/goacc/loop-2-kernels.f95: Update.
......
/* 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;
}
...@@ -147,8 +147,8 @@ void K(void) ...@@ -147,8 +147,8 @@ void K(void)
#pragma acc kernels loop worker(num:5) #pragma acc kernels loop worker(num:5)
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop seq worker // { dg-error "'seq' overrides" "" { target c } } #pragma acc kernels loop seq worker // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop gang worker #pragma acc kernels loop gang worker
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
...@@ -163,8 +163,8 @@ void K(void) ...@@ -163,8 +163,8 @@ void K(void)
#pragma acc kernels loop vector(length:5) #pragma acc kernels loop vector(length:5)
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop seq vector // { dg-error "'seq' overrides" "" { target c } } #pragma acc kernels loop seq vector // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop gang vector #pragma acc kernels loop gang vector
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
...@@ -176,16 +176,16 @@ void K(void) ...@@ -176,16 +176,16 @@ void K(void)
#pragma acc kernels loop auto #pragma acc kernels loop auto
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop seq auto // { dg-error "'seq' overrides" "" { target c } } #pragma acc kernels loop seq auto // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc kernels loop gang auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc kernels loop worker auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc kernels loop vector auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
} }
...@@ -117,16 +117,16 @@ void P(void) ...@@ -117,16 +117,16 @@ void P(void)
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop seq gang // { dg-error "'seq' overrides" "" { target c } } #pragma acc parallel loop seq gang // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop worker #pragma acc parallel loop worker
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop seq worker // { dg-error "'seq' overrides" "" { target c } } #pragma acc parallel loop seq worker // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop gang worker #pragma acc parallel loop gang worker
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
...@@ -136,8 +136,8 @@ void P(void) ...@@ -136,8 +136,8 @@ void P(void)
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop seq vector // { dg-error "'seq' overrides" "" { target c } } #pragma acc parallel loop seq vector // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop gang vector #pragma acc parallel loop gang vector
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
...@@ -149,16 +149,16 @@ void P(void) ...@@ -149,16 +149,16 @@ void P(void)
#pragma acc parallel loop auto #pragma acc parallel loop auto
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop seq auto // { dg-error "'seq' overrides" "" { target c } } #pragma acc parallel loop seq auto // { dg-error "'seq' overrides" }
for (i = 0; i < 10; i++) // { dg-error "'seq' overrides" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc parallel loop gang auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc parallel loop worker auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" "" { target c } } #pragma acc parallel loop vector auto // { dg-error "'auto' conflicts" }
for (i = 0; i < 10; i++) // { dg-error "'auto' conflicts" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
} }
...@@ -37,24 +37,24 @@ void p2 (void) ...@@ -37,24 +37,24 @@ void p2 (void)
{ {
int i, j; int i, j;
#pragma acc parallel loop gang(5) // { dg-error "argument not permitted" "" { target c } } #pragma acc parallel loop gang(5) // { dg-error "argument not permitted" }
for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop gang(num:5) // { 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++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop worker(5) // { dg-error "argument not permitted" "" { target c } } #pragma acc parallel loop worker(5) // { dg-error "argument not permitted" }
for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop worker(num:5) // { 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++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop vector(5) // { dg-error "argument not permitted" "" { target c } } #pragma acc parallel loop vector(5) // { dg-error "argument not permitted" }
for (i = 0; i < 10; i++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
#pragma acc parallel loop vector(length:5) // { 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++) // { dg-error "argument not permitted" "" { target c++ } } for (i = 0; i < 10; i++)
{ } { }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment