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)8 foo (void)
9 {
10   static int s;
11   return ++s + g;
12 }
13 #pragma omp end declare target
14 
15 int
bar(void)16 bar (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()25 main ()
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