Commit d9f4ea18 by Jakub Jelinek Committed by Jakub Jelinek

gimplify.c (gimplify_omp_ordered): Fix up diagnostics wording.

	* gimplify.c (gimplify_omp_ordered): Fix up diagnostics
	wording.
	* omp-low.c (check_omp_nesting_restrictions): Update for the
	various new OpenMP 4.5 nesting restrictions, clarified
	nesting glossary, closely nested region relationship clarified
	to mean explicit or implicit parallel regions (target/teams),
	use %</%> or %qs where appropriate.

	* gcc.dg/gomp/ordered-2.c (f1): Expect an extra error.
	* g++.dg/gomp/ordered-2.C (f1): Likewise.
	* gfortran.dg/goacc/parallel-kernels-regions.f95: Adjust
	expected diagnostics for the addition of quotes.
	* gfortran.dg/gomp/target3.f90: Likewise.
	* c-c++-common/goacc/nesting-fail-1.c: Likewise.
	* c-c++-common/goacc-gomp/nesting-fail-1.c: Likewise.
	* c-c++-common/gomp/doacross-1.c: Likewise.
	* c-c++-common/gomp/nesting-warn-1.c: Likewise.
	* c-c++-common/gomp/cancel-1.c (f2): Add some new tests.
	Adjust expected diagnostics wording.
	* c-c++-common/gomp/clauses-4.c (foo): Likewise.
	Don't expect error on ordered threads simd when in for simd.
	* c-c++-common/gomp/nesting-2.c: New test.
	* c-c++-common/gomp/ordered-3.c (foo): Add some new tests.
	* c-c++-common/gomp/ordered-4.c: New test.

From-SVN: r229892
parent 38101f91
2015-11-06 Jakub Jelinek <jakub@redhat.com>
* gimplify.c (gimplify_omp_ordered): Fix up diagnostics
wording.
* omp-low.c (check_omp_nesting_restrictions): Update for the
various new OpenMP 4.5 nesting restrictions, clarified
nesting glossary, closely nested region relationship clarified
to mean explicit or implicit parallel regions (target/teams),
use %</%> or %qs where appropriate.
2015-11-06 Aditya Kumar <aditya.k7@samsung.com> 2015-11-06 Aditya Kumar <aditya.k7@samsung.com>
Sebastian Pop <s.pop@samsung.com> Sebastian Pop <s.pop@samsung.com>
...@@ -9259,9 +9259,9 @@ gimplify_omp_ordered (tree expr, gimple_seq body) ...@@ -9259,9 +9259,9 @@ gimplify_omp_ordered (tree expr, gimple_seq body)
|| OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE)) || OMP_CLAUSE_DEPEND_KIND (c) == OMP_CLAUSE_DEPEND_SOURCE))
{ {
error_at (OMP_CLAUSE_LOCATION (c), error_at (OMP_CLAUSE_LOCATION (c),
"%<depend%> clause must be closely nested " "%<ordered%> construct with %<depend%> clause must be "
"inside a loop with %<ordered%> clause with " "closely nested inside a loop with %<ordered%> clause "
"a parameter"); "with a parameter");
failures++; failures++;
} }
else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND else if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_DEPEND
......
2015-11-06 Jakub Jelinek <jakub@redhat.com>
* gcc.dg/gomp/ordered-2.c (f1): Expect an extra error.
* g++.dg/gomp/ordered-2.C (f1): Likewise.
* gfortran.dg/goacc/parallel-kernels-regions.f95: Adjust
expected diagnostics for the addition of quotes.
* gfortran.dg/gomp/target3.f90: Likewise.
* c-c++-common/goacc/nesting-fail-1.c: Likewise.
* c-c++-common/goacc-gomp/nesting-fail-1.c: Likewise.
* c-c++-common/gomp/doacross-1.c: Likewise.
* c-c++-common/gomp/nesting-warn-1.c: Likewise.
* c-c++-common/gomp/cancel-1.c (f2): Add some new tests.
Adjust expected diagnostics wording.
* c-c++-common/gomp/clauses-4.c (foo): Likewise.
Don't expect error on ordered threads simd when in for simd.
* c-c++-common/gomp/nesting-2.c: New test.
* c-c++-common/gomp/ordered-3.c (foo): Add some new tests.
* c-c++-common/gomp/ordered-4.c: New test.
2015-11-06 Mike Stump <mikestump@comcast.net> 2015-11-06 Mike Stump <mikestump@comcast.net>
* gcc.dg/pragma-diag-5.c: Make test cases unique. * gcc.dg/pragma-diag-5.c: Make test cases unique.
......
...@@ -151,15 +151,15 @@ f_omp (void) ...@@ -151,15 +151,15 @@ f_omp (void)
#pragma omp target #pragma omp target
{ {
#pragma acc parallel /* { dg-error "OpenACC parallel construct inside of OpenMP target region" } */ #pragma acc parallel /* { dg-error "OpenACC .parallel. construct inside of OpenMP .target. region" } */
; ;
#pragma acc kernels /* { dg-error "OpenACC kernels construct inside of OpenMP target region" } */ #pragma acc kernels /* { dg-error "OpenACC .kernels. construct inside of OpenMP .target. region" } */
; ;
#pragma acc data /* { dg-error "OpenACC data construct inside of OpenMP target region" } */ #pragma acc data /* { dg-error "OpenACC .data. construct inside of OpenMP .target. region" } */
; ;
#pragma acc update host(i) /* { dg-error "OpenACC update construct inside of OpenMP target region" } */ #pragma acc update host(i) /* { dg-error "OpenACC .update. construct inside of OpenMP .target. region" } */
#pragma acc enter data copyin(i) /* { dg-error "OpenACC enter/exit data construct inside of OpenMP target region" } */ #pragma acc enter data copyin(i) /* { dg-error "OpenACC .enter/exit data. construct inside of OpenMP .target. region" } */
#pragma acc exit data delete(i) /* { dg-error "OpenACC enter/exit data construct inside of OpenMP target region" } */ #pragma acc exit data delete(i) /* { dg-error "OpenACC .enter/exit data. construct inside of OpenMP .target. region" } */
#pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */ #pragma acc loop /* { dg-error "loop directive must be associated with an OpenACC compute region" } */
for (i = 0; i < 2; ++i) for (i = 0; i < 2; ++i)
; ;
......
...@@ -7,15 +7,15 @@ f_acc_parallel (void) ...@@ -7,15 +7,15 @@ f_acc_parallel (void)
{ {
#pragma acc parallel #pragma acc parallel
{ {
#pragma acc parallel /* { dg-bogus "parallel construct inside of parallel region" "not implemented" { xfail *-*-* } } */ #pragma acc parallel /* { dg-bogus ".parallel. construct inside of .parallel. region" "not implemented" { xfail *-*-* } } */
; ;
#pragma acc kernels /* { dg-bogus "kernels construct inside of parallel region" "not implemented" { xfail *-*-* } } */ #pragma acc kernels /* { dg-bogus ".kernels. construct inside of .parallel. region" "not implemented" { xfail *-*-* } } */
; ;
#pragma acc data /* { dg-error "data construct inside of parallel region" } */ #pragma acc data /* { dg-error ".data. construct inside of .parallel. region" } */
; ;
#pragma acc update host(i) /* { dg-error "update construct inside of parallel region" } */ #pragma acc update host(i) /* { dg-error ".update. construct inside of .parallel. region" } */
#pragma acc enter data copyin(i) /* { dg-error "enter/exit data construct inside of parallel region" } */ #pragma acc enter data copyin(i) /* { dg-error ".enter/exit data. construct inside of .parallel. region" } */
#pragma acc exit data delete(i) /* { dg-error "enter/exit data construct inside of parallel region" } */ #pragma acc exit data delete(i) /* { dg-error ".enter/exit data. construct inside of .parallel. region" } */
} }
} }
...@@ -26,14 +26,14 @@ f_acc_kernels (void) ...@@ -26,14 +26,14 @@ f_acc_kernels (void)
{ {
#pragma acc kernels #pragma acc kernels
{ {
#pragma acc parallel /* { dg-bogus "parallel construct inside of kernels region" "not implemented" { xfail *-*-* } } */ #pragma acc parallel /* { dg-bogus ".parallel. construct inside of .kernels. region" "not implemented" { xfail *-*-* } } */
; ;
#pragma acc kernels /* { dg-bogus "kernels construct inside of kernels region" "not implemented" { xfail *-*-* } } */ #pragma acc kernels /* { dg-bogus ".kernels. construct inside of .kernels. region" "not implemented" { xfail *-*-* } } */
; ;
#pragma acc data /* { dg-error "data construct inside of kernels region" } */ #pragma acc data /* { dg-error ".data. construct inside of .kernels. region" } */
; ;
#pragma acc update host(i) /* { dg-error "update construct inside of kernels region" } */ #pragma acc update host(i) /* { dg-error ".update. construct inside of .kernels. region" } */
#pragma acc enter data copyin(i) /* { dg-error "enter/exit data construct inside of kernels region" } */ #pragma acc enter data copyin(i) /* { dg-error ".enter/exit data. construct inside of .kernels. region" } */
#pragma acc exit data delete(i) /* { dg-error "enter/exit data construct inside of kernels region" } */ #pragma acc exit data delete(i) /* { dg-error ".enter/exit data. construct inside of .kernels. region" } */
} }
} }
...@@ -77,12 +77,73 @@ f2 (void) ...@@ -77,12 +77,73 @@ f2 (void)
#pragma omp cancel parallel /* { dg-error "not closely nested inside" } */ #pragma omp cancel parallel /* { dg-error "not closely nested inside" } */
#pragma omp cancel for /* { dg-error "not closely nested inside" } */ #pragma omp cancel for /* { dg-error "not closely nested inside" } */
#pragma omp cancel sections /* { dg-error "not closely nested inside" } */ #pragma omp cancel sections /* { dg-error "not closely nested inside" } */
#pragma omp cancel taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
#pragma omp cancellation point parallel /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point for /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point sections /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
}
#pragma omp taskgroup
#pragma omp task
{
#pragma omp cancel parallel /* { dg-error "not closely nested inside" } */
#pragma omp cancel for /* { dg-error "not closely nested inside" } */
#pragma omp cancel sections /* { dg-error "not closely nested inside" } */
#pragma omp cancel taskgroup #pragma omp cancel taskgroup
#pragma omp cancellation point parallel /* { dg-error "not closely nested inside" } */ #pragma omp cancellation point parallel /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point for /* { dg-error "not closely nested inside" } */ #pragma omp cancellation point for /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point sections /* { dg-error "not closely nested inside" } */ #pragma omp cancellation point sections /* { dg-error "not closely nested inside" } */
#pragma omp cancellation point taskgroup #pragma omp cancellation point taskgroup
} }
#pragma omp taskgroup
{
#pragma omp task
{
#pragma omp task
{
#pragma omp cancellation point taskgroup
#pragma omp cancel taskgroup
}
}
}
#pragma omp taskgroup
{
#pragma omp parallel
{
#pragma omp task
{
#pragma omp cancel taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
#pragma omp cancellation point taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
}
}
#pragma omp target
{
#pragma omp task
{
#pragma omp cancel taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
#pragma omp cancellation point taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
}
}
#pragma omp target
#pragma omp teams
#pragma omp distribute
for (i = 0; i < 10; i++)
{
#pragma omp task
{
#pragma omp cancel taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
#pragma omp cancellation point taskgroup /* { dg-error "construct not closely nested inside of .taskgroup. region" } */
}
}
#pragma omp target data map(i)
{
#pragma omp task
{
#pragma omp cancel taskgroup
#pragma omp cancellation point taskgroup
}
}
}
#pragma omp for #pragma omp for
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
{ {
...@@ -179,14 +240,14 @@ f2 (void) ...@@ -179,14 +240,14 @@ f2 (void)
} }
#pragma omp target teams #pragma omp target teams
{ {
#pragma omp cancel parallel /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancel parallel /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancel for /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancel for /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancel sections /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancel sections /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancel taskgroup /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancel taskgroup /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancellation point parallel /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancellation point parallel /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancellation point for /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancellation point for /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancellation point sections /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancellation point sections /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
#pragma omp cancellation point taskgroup /* { dg-error "only distribute or parallel constructs are allowed to be closely nested" } */ #pragma omp cancellation point taskgroup /* { dg-error "only .distribute. or .parallel. regions are allowed to be strictly nested" } */
} }
#pragma omp target teams distribute #pragma omp target teams distribute
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
......
...@@ -57,40 +57,62 @@ foo (int y, short z) ...@@ -57,40 +57,62 @@ foo (int y, short z)
#pragma omp distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp distribute parallel for." } */ #pragma omp distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp distribute parallel for." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered /* { dg-error "ordered region must be closely nested inside a loop region with an ordered clause" } */ #pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
; ;
} }
#pragma omp target teams #pragma omp target teams
#pragma omp distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp distribute parallel for simd." } */ #pragma omp distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp distribute parallel for simd." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered simd, threads /* { dg-error "OpenMP constructs other than .#pragma omp ordered simd. may not be nested inside simd region" } */ #pragma omp ordered simd, threads
; ;
} }
#pragma omp target #pragma omp target
#pragma omp teams distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp teams distribute parallel for." } */ #pragma omp teams distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp teams distribute parallel for." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered /* { dg-error "ordered region must be closely nested inside a loop region with an ordered clause" } */ #pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
; ;
} }
#pragma omp target #pragma omp target
#pragma omp teams distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp teams distribute parallel for simd." } */ #pragma omp teams distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp teams distribute parallel for simd." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered simd, threads /* { dg-error "OpenMP constructs other than .#pragma omp ordered simd. may not be nested inside simd region" } */ #pragma omp ordered simd, threads
; ;
} }
#pragma omp target teams distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp target teams distribute parallel for." } */ #pragma omp target teams distribute parallel for ordered /* { dg-error ".ordered. is not valid for .#pragma omp target teams distribute parallel for." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered /* { dg-error "ordered region must be closely nested inside a loop region with an ordered clause" } */ #pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
; ;
} }
#pragma omp target teams distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp target teams distribute parallel for simd." } */ #pragma omp target teams distribute parallel for simd ordered /* { dg-error ".ordered. is not valid for .#pragma omp target teams distribute parallel for simd." } */
for (x = 0; x < 64; x++) for (x = 0; x < 64; x++)
{ {
#pragma omp ordered simd, threads /* { dg-error "OpenMP constructs other than .#pragma omp ordered simd. may not be nested inside simd region" } */ #pragma omp ordered simd, threads
;
}
#pragma omp simd
for (x = 0; x < 64; x++)
{
#pragma omp ordered threads simd /* { dg-error ".ordered simd threads. must be closely nested inside of .for simd. region" } */
;
}
#pragma omp for
for (x = 0; x < 64; x++)
{
#pragma omp simd
for (y = 0; y < 16; y++)
{
#pragma omp ordered simd threads /* { dg-error ".ordered simd threads. must be closely nested inside of .for simd. region" } */
;
}
}
#pragma omp for simd
for (x = 0; x < 64; x++)
{
#pragma omp ordered threads simd
; ;
} }
} }
...@@ -32,8 +32,8 @@ foo (void) ...@@ -32,8 +32,8 @@ foo (void)
#pragma omp ordered depend (sink: i - 1, j - 2) /* { dg-error "does not match number" } */ #pragma omp ordered depend (sink: i - 1, j - 2) /* { dg-error "does not match number" } */
#pragma omp ordered depend (source) #pragma omp ordered depend (source)
} }
#pragma omp ordered depend (sink: j) /* { dg-error "clause must be closely nested inside an ordered loop" } */ #pragma omp ordered depend (sink: j) /* { dg-error "clause must be closely nested inside an .ordered. loop" } */
#pragma omp ordered depend (source) /* { dg-error "clause must be closely nested inside an ordered loop" } */ #pragma omp ordered depend (source) /* { dg-error "clause must be closely nested inside an .ordered. loop" } */
#pragma omp for ordered (1) #pragma omp for ordered (1)
for (i = 0; i < 64; i++) for (i = 0; i < 64; i++)
{ {
......
void
foo (void)
{
int i;
#pragma omp taskloop
for (i = 0; i < 64; i++)
{
int j;
#pragma omp for /* { dg-error "region may not be closely nested inside of" } */
for (j = 0; j < 10; j++)
;
#pragma omp single /* { dg-error "region may not be closely nested inside of" } */
;
#pragma omp sections /* { dg-error "region may not be closely nested inside of" } */
{
#pragma omp section
;
}
#pragma omp barrier /* { dg-error "region may not be closely nested inside of" } */
#pragma omp master /* { dg-error "region may not be closely nested inside of" } */
;
#pragma omp ordered /* { dg-error "region may not be closely nested inside of" } */
;
#pragma omp ordered threads /* { dg-error "region may not be closely nested inside of" } */
;
#pragma omp ordered simd threads /* { dg-error ".ordered. .simd. must be closely nested inside .simd. region" } */
;
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
#pragma omp critical
{
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
}
}
#pragma omp taskloop
for (i = 0; i < 64; i++)
#pragma omp parallel
{
int j;
#pragma omp for
for (j = 0; j < 10; j++)
;
#pragma omp single
;
#pragma omp sections
{
#pragma omp section
;
}
#pragma omp barrier
#pragma omp master
;
#pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
#pragma omp ordered threads /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
#pragma omp critical
{
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
}
}
#pragma omp taskloop
for (i = 0; i < 64; i++)
#pragma omp target
{
int j;
#pragma omp for
for (j = 0; j < 10; j++)
;
#pragma omp single
;
#pragma omp sections
{
#pragma omp section
;
}
#pragma omp barrier
#pragma omp master
;
#pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
#pragma omp ordered threads /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
#pragma omp critical
{
#pragma omp simd
for (j = 0; j < 10; j++)
#pragma omp ordered simd
;
}
}
#pragma omp ordered
{
#pragma omp ordered /* { dg-error "region may not be closely nested inside of" } */
;
}
#pragma omp ordered threads
{
#pragma omp ordered /* { dg-error "region may not be closely nested inside of" } */
;
}
#pragma omp ordered
{
#pragma omp ordered threads /* { dg-error "region may not be closely nested inside of" } */
;
}
#pragma omp ordered threads
{
#pragma omp ordered threads /* { dg-error "region may not be closely nested inside of" } */
;
}
#pragma omp critical
{
#pragma omp ordered simd /* { dg-error ".ordered. .simd. must be closely nested inside .simd. region" } */
;
}
#pragma omp for ordered
for (i = 0; i < 64; i++)
#pragma omp parallel
{
#pragma omp ordered threads /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
}
#pragma omp for ordered
for (i = 0; i < 64; i++)
#pragma omp parallel
{
#pragma omp ordered /* { dg-error ".ordered. region must be closely nested inside a loop region with an .ordered. clause" } */
;
}
#pragma omp for ordered(1)
for (i = 0; i < 64; i++)
#pragma omp parallel
{
#pragma omp ordered depend(source) /* { dg-error ".ordered. construct with .depend. clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
#pragma omp ordered depend(sink: i - 1) /* { dg-error ".ordered. construct with .depend. clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
}
}
...@@ -5,19 +5,19 @@ f_omp_target (void) ...@@ -5,19 +5,19 @@ f_omp_target (void)
{ {
#pragma omp target #pragma omp target
{ {
#pragma omp target /* { dg-warning "target construct inside of target region" } */ #pragma omp target /* { dg-warning ".target. construct inside of .target. region" } */
; ;
#pragma omp target data map(i) /* { dg-warning "target data construct inside of target region" } */ #pragma omp target data map(i) /* { dg-warning ".target data. construct inside of .target. region" } */
; ;
#pragma omp target update to(i) /* { dg-warning "target update construct inside of target region" } */ #pragma omp target update to(i) /* { dg-warning ".target update. construct inside of .target. region" } */
#pragma omp parallel #pragma omp parallel
{ {
#pragma omp target /* { dg-warning "target construct inside of target region" } */ #pragma omp target /* { dg-warning ".target. construct inside of .target. region" } */
; ;
#pragma omp target data map(i) /* { dg-warning "target data construct inside of target region" } */ #pragma omp target data map(i) /* { dg-warning ".target data. construct inside of .target. region" } */
; ;
#pragma omp target update to(i) /* { dg-warning "target update construct inside of target region" } */ #pragma omp target update to(i) /* { dg-warning ".target update. construct inside of .target. region" } */
} }
} }
} }
...@@ -59,6 +59,18 @@ foo (void) ...@@ -59,6 +59,18 @@ foo (void)
#pragma omp ordered depend(sink: i - 1) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */ #pragma omp ordered depend(sink: i - 1) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
#pragma omp ordered depend(source) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */ #pragma omp ordered depend(source) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
} }
#pragma omp parallel for ordered
for (i = 0; i < 64; i++)
{
#pragma omp ordered depend(sink: i - 1) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
#pragma omp ordered depend(source) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
}
#pragma omp parallel for
for (i = 0; i < 64; i++)
{
#pragma omp ordered depend(sink: i - 1) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
#pragma omp ordered depend(source) /* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
}
} }
void void
......
void
f1 (void)
{
int i, j;
#pragma omp critical
{
#pragma omp simd
for (i = 0; i < 64; i++)
{
#pragma omp ordered simd
;
}
}
#pragma omp ordered threads
{
#pragma omp simd
for (i = 0; i < 64; i++)
{
#pragma omp ordered simd
;
}
}
#pragma omp task
{
#pragma omp simd
for (i = 0; i < 64; i++)
{
#pragma omp ordered simd
;
}
}
#pragma omp taskloop
for (j = 0; j < 64; j++)
#pragma omp simd
for (i = 0; i < 64; i++)
{
#pragma omp ordered simd
;
}
}
void
f2 (void)
{
#pragma omp ordered simd
;
}
void
f3 (void)
{
#pragma omp ordered threads , simd
;
}
...@@ -3,5 +3,5 @@ ...@@ -3,5 +3,5 @@
void f1(void) void f1(void)
{ {
#pragma omp ordered asdf /* { dg-error "expected" } */ #pragma omp ordered asdf /* { dg-error "expected" } */
#pragma omp ordered #pragma omp ordered /* { dg-error "region may not be closely nested inside of" } */
} /* { dg-error "expected" } */ } /* { dg-error "expected" } */
...@@ -3,5 +3,5 @@ ...@@ -3,5 +3,5 @@
void f1(void) void f1(void)
{ {
#pragma omp ordered asdf /* { dg-error "expected" } */ #pragma omp ordered asdf /* { dg-error "expected" } */
#pragma omp ordered #pragma omp ordered /* { dg-error "region may not be closely nested inside of" } */
} /* { dg-error "expected expression" } */ } /* { dg-error "expected expression" } */
...@@ -9,46 +9,46 @@ program test ...@@ -9,46 +9,46 @@ program test
integer :: i integer :: i
!$acc parallel !$acc parallel
!$acc kernels ! { dg-bogus "kernels construct inside of parallel region" "not implemented" { xfail *-*-* } } !$acc kernels ! { dg-bogus ".kernels. construct inside of .parallel. region" "not implemented" { xfail *-*-* } }
!$acc end kernels !$acc end kernels
!$acc end parallel !$acc end parallel
!$acc parallel !$acc parallel
!$acc parallel ! { dg-bogus "parallel construct inside of parallel region" "not implemented" { xfail *-*-* } } !$acc parallel ! { dg-bogus ".parallel. construct inside of .parallel. region" "not implemented" { xfail *-*-* } }
!$acc end parallel !$acc end parallel
!$acc end parallel !$acc end parallel
!$acc parallel !$acc parallel
!$acc parallel ! { dg-bogus "parallel construct inside of parallel region" "not implemented" { xfail *-*-* } } !$acc parallel ! { dg-bogus ".parallel. construct inside of .parallel. region" "not implemented" { xfail *-*-* } }
!$acc end parallel !$acc end parallel
!$acc kernels ! { dg-bogus "kernels construct inside of parallel region" "not implemented" { xfail *-*-* } } !$acc kernels ! { dg-bogus ".kernels. construct inside of .parallel. region" "not implemented" { xfail *-*-* } }
!$acc end kernels !$acc end kernels
!$acc end parallel !$acc end parallel
!$acc kernels !$acc kernels
!$acc kernels ! { dg-bogus "kernels construct inside of kernels region" "not implemented" { xfail *-*-* } } !$acc kernels ! { dg-bogus ".kernels. construct inside of .kernels. region" "not implemented" { xfail *-*-* } }
!$acc end kernels !$acc end kernels
!$acc end kernels !$acc end kernels
!$acc kernels !$acc kernels
!$acc parallel ! { dg-bogus "parallel construct inside of kernels region" "not implemented" { xfail *-*-* } } !$acc parallel ! { dg-bogus ".parallel. construct inside of .kernels. region" "not implemented" { xfail *-*-* } }
!$acc end parallel !$acc end parallel
!$acc end kernels !$acc end kernels
!$acc kernels !$acc kernels
!$acc parallel ! { dg-bogus "parallel construct inside of kernels region" "not implemented" { xfail *-*-* } } !$acc parallel ! { dg-bogus ".parallel. construct inside of .kernels. region" "not implemented" { xfail *-*-* } }
!$acc end parallel !$acc end parallel
!$acc kernels ! { dg-bogus "kernels construct inside of kernels region" "not implemented" { xfail *-*-* } } !$acc kernels ! { dg-bogus ".kernels. construct inside of .kernels. region" "not implemented" { xfail *-*-* } }
!$acc end kernels !$acc end kernels
!$acc end kernels !$acc end kernels
!$acc parallel !$acc parallel
!$acc data ! { dg-error "data construct inside of parallel region" } !$acc data ! { dg-error ".data. construct inside of .parallel. region" }
!$acc end data !$acc end data
!$acc end parallel !$acc end parallel
!$acc kernels !$acc kernels
!$acc data ! { dg-error "data construct inside of kernels region" } !$acc data ! { dg-error ".data. construct inside of .kernels. region" }
!$acc end data !$acc end data
!$acc end kernels !$acc end kernels
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
subroutine foo (r) subroutine foo (r)
integer :: i, r integer :: i, r
!$omp target !$omp target
!$omp target teams distribute parallel do reduction (+: r) ! { dg-warning "target construct inside of target region" } !$omp target teams distribute parallel do reduction (+: r) ! { dg-warning ".target. construct inside of .target. region" }
do i = 1, 10 do i = 1, 10
r = r + 1 r = r + 1
end do end do
......
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