1 extern "C" void abort (void); 2 3 int g; 4 #pragma omp declare target (g) 5 6 #pragma omp declare target 7 int foo(void)8foo (void) 9 { 10 static int s; 11 return ++s + g; 12 } 13 #pragma omp end declare target 14 15 int bar(void)16bar (void) 17 { 18 static int s; 19 #pragma omp declare target to (s) 20 return ++s; 21 } 22 #pragma omp declare target (bar) 23 24 int main()25main () 26 { 27 int r; 28 #pragma omp target map(from:r) 29 { 30 r = (foo () == 1) + (bar () == 1); 31 r += (foo () == 2) + (bar () == 2); 32 } 33 if (r != 4) 34 abort (); 35 return 0; 36 } 37