blob: 71a556e275133dc2e067ae2632d6c24d6952ef07 [file] [log] [blame]
/* Verify column location information. */
/* See also 'gfortran.dg/goacc/pr92793-1.f90'. */
/* { dg-additional-options "-fdump-tree-original-lineno" }, and also
{ dg-additional-options "-fdump-tree-gimple-lineno" } as the former doesn't
actually contain location information. */
/* No tabs. Funny indentation/spacing for a reason. */
static void
check ()
{
int i, j, sum, diff;
#pragma acc parallel \
/* C, C++ location information points to the 'a' in '#pragma acc parallel'. */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:17:12\\\] #pragma acc parallel" 1 "original" { xfail *-*-* } } } */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:17:12\\\] #pragma omp target oacc_parallel" 1 "gimple" } } */
{
#pragma acc loop \
/* C, C++ location information points to the 'a' in '#pragma acc loop'. */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:22:13\\\] #pragma acc loop" 1 "original" { xfail *-*-* } } } */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:22:13\\\] #pragma acc loop" 1 "gimple" } } */ \
reduction ( + : sum) /* { dg-line sum1 } */ \
/* C location information points to the '(' in 'reduction(+:sum)'. */ \
/* { dg-message "19: location of the previous reduction for 'sum'" "" { target c } sum1 } */ \
/* C++ location information points to 'sum' in 'reduction(+:sum)'. */ \
/* { dg-message "28: location of the previous reduction for 'sum'" "" { target c++ } sum1 } */ \
independent
for (i = 1; i <= 10; i++)
{
#pragma acc loop \
/* C, C++ location information points to the 'a' in '#pragma acc loop'. */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:34:19\\\] #pragma acc loop" 1 "original" { xfail *-*-* } } } */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:34:19\\\] #pragma acc loop" 1 "gimple" } } */ \
reduction ( - : diff ) \
reduction(-:sum ) /* { dg-line sum2 } */ \
/* C location information points to the '(' in 'reduction(-:sum)'. */ \
/* { dg-warning "10: conflicting reduction operations for 'sum'" "" { target c } sum2 } */ \
/* C++ location information points to 'sum' in 'reduction(-:sum)'. */ \
/* { dg-warning "13: conflicting reduction operations for 'sum'" "" { target c++ } sum2 } */ \
independent
for (j = 1; j <= 10; j++)
{
sum
=
1 ;
/* C, C++ location information points to the '=' in 'sum = 1'. */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:48:19\\\] sum = 1" 1 "original" { xfail *-*-* } } } */ \
/* { dg-final { scan-tree-dump-times "pr92793-1\\\.c:48:19\\\] sum = 1" 1 "gimple" } } */
}
}
}
}
void
gwv_sl_1() {
#pragma acc serial loop /* { dg-message "9: enclosing parent compute construct" } */ \
gang(num:5) /* { dg-error "5: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "3: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "4: argument not permitted on 'vector' clause" } */
for (int i = 0; i < 10; i++)
;
}
void
gwv_sl_2() {
#pragma acc serial loop /* { dg-message "9: enclosing parent compute construct" } */
for (int i = 0; i < 10; i++)
{
#pragma acc loop /* { dg-bogus "enclosing parent compute construct" } */
for (int j = 0; j < 10; j++)
{
#pragma acc loop \
gang(num:5) /* { dg-error "9: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "5: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "3: argument not permitted on 'vector' clause" } */
for (int k = 0; k < 10; k++)
;
}
}
}
void
gwv_s_l() {
#pragma acc serial /* { dg-message "9: enclosing parent compute construct" } */
{
#pragma acc loop \
gang(num:5) /* { dg-error "8: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "4: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "3: argument not permitted on 'vector' clause" } */
for (int i = 0; i < 10; i++)
;
#pragma acc loop
for (int i = 0; i < 10; i++)
{
#pragma acc loop /* { dg-bogus "enclosing parent compute construct" } */
for (int j = 0; j < 10; j++)
{
#pragma acc loop \
gang(num:5) /* { dg-error "10: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "7: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "5: argument not permitted on 'vector' clause" } */
for (int k = 0; k < 10; k++)
;
}
}
}
}
void gwv_r();
#pragma acc routine(gwv_r)
void
gwv_r() { /* { dg-message "1: enclosing routine" } */
#pragma acc loop \
gang(num:5) /* { dg-error "4: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "5: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "3: argument not permitted on 'vector' clause" } */
for (int i = 0; i < 10; i++)
;
#pragma acc loop
for (int i = 0; i < 10; i++)
{
#pragma acc loop
for (int j = 0; j < 10; j++)
{
#pragma acc loop \
gang(num:5) /* { dg-error "6: argument not permitted on 'gang' clause" } */ \
worker(num:5) /* { dg-error "4: argument not permitted on 'worker' clause" } */ \
vector(length:5) /* { dg-error "6: argument not permitted on 'vector' clause" } */
for (int k = 0; k < 10; k++)
;
}
}
}