/* { dg-do compile } */ void foo () { int * x; #pragma omp target is_device_ptr(x) has_device_addr(x) /*{ dg-error "'x' appears more than once in data clauses" } */ ; #pragma omp target has_device_addr(x) is_device_ptr(x) /* { dg-error "'x' appears more than once in data clauses" } */ ; int y = 42; #pragma omp target has_device_addr(y) has_device_addr(y) /* { dg-error "'y' appears more than once in data clauses" } */ ; #pragma omp target private(y) has_device_addr(y) /*{ dg-error "'y' appears more than once in data clauses" } */ ; #pragma omp target has_device_addr(y) private(y) /*{ dg-error "'y' appears more than once in data clauses" } */ ; #pragma omp target firstprivate(y) has_device_addr(y) /*{ dg-error "'y' appears more than once in data clauses" } */ ; #pragma omp target has_device_addr(y) map(y) /* { dg-error "'y' appears both in data and map clauses" } */ ; #pragma omp target map(y) has_device_addr(y) /* { dg-error "'y' appears both in data and map clauses" } */ ; int z[3] = { 2, 5, 7 }; #pragma omp target data map(z[:3]) use_device_addr(z) #pragma omp target has_device_addr(z[1:]) ; #pragma omp target data map(z[:3]) use_device_addr(z) #pragma omp target has_device_addr(z[1]) ; #pragma omp target data map(z[:3]) use_device_addr(z) #pragma omp target has_device_addr(z[1:2]) ; #pragma omp target data map(z[:3]) use_device_addr(z) #pragma omp target has_device_addr(z[:2]) ; int w[3][4]; #pragma omp target data map(w) use_device_addr(w) #pragma omp target has_device_addr(w[1][2]) ; #pragma omp target data map(w) use_device_addr(w) #pragma omp target has_device_addr(w[:1][2:]) ; int u[0]; #pragma omp target data map(u) use_device_addr(u) #pragma omp target has_device_addr(u) ; struct S { int m; } s; s.m = 42; #pragma omp target data map (s) use_device_addr (s) #pragma omp target has_device_addr (s) ++s.m; }