/* { dg-do compile } */ /* { dg-options "-fopenmp" } */ #pragma omp declare target int a[] = { 1, 2, 3 }; extern int b[]; /* { dg-error "'b' in declare target directive does not have mappable type" } */ extern int c[]; /* { dg-error "'c' in declare target directive does not have mappable type" } */ extern int d[]; /* { dg-error "'d' in declare target directive does not have mappable type" } */ int d[3]; #pragma omp end declare target int c[3]; int e[] = { 1, 2, 3 }; #pragma omp declare target to (e) extern int f[]; #pragma omp declare target to (f) /* { dg-error "'f' does not have a mappable type in 'to' clause" } */ extern int g[]; #pragma omp declare target to (g) /* { dg-error "'g' does not have a mappable type in 'to' clause" } */ extern int g2[]; #pragma omp declare target enter (g2) /* { dg-error "'g2' does not have a mappable type in 'enter' clause" } */ int g[3]; extern int h[]; int h[3]; #pragma omp declare target to (h) #pragma omp declare target enter (h) int i[] = { 1, 2, 3 }; int j[] = { 1, 2, 3 }; extern int k[]; extern int l[]; extern int m[]; extern int n[]; extern int o[]; extern int p[]; int k[3]; int l[3]; int q; void foo (void) { #pragma omp target update to (q) to (i) #pragma omp target map (tofrom: j) ; #pragma omp target update from (q) from (k) #pragma omp target map (to: l) ; #pragma omp target update from (q) from (m) /* { dg-error "'m' does not have a mappable type in 'from' clause" } */ #pragma omp target map (from: n) /* { dg-error "'n' does not have a mappable type in 'map' clause" } */ ; #pragma omp target update to (q) to (o) /* { dg-error "'o' does not have a mappable type in 'to' clause" } */ #pragma omp target map (from: p) /* { dg-error "'p' does not have a mappable type in 'map' clause" } */ ; } int o[3]; int p[3];