--- /dev/null
+/* Based on sollve_vv's tests/5.0/declare_target/test_nested_declare_target.c. */\r
+\r
+#define N 1024\r
+int a[N], b[N], c[N]; \r
+int i = 0;\r
+\r
+void\r
+update ()\r
+{ \r
+ for (i = 0; i < N; i++)\r
+ {\r
+ a[i] += 1;\r
+ b[i] += 2;\r
+ c[i] += 3;\r
+ }\r
+}\r
+\r
+#pragma omp declare target \r
+#pragma omp declare target link(a,c,b,i)\r
+#pragma omp declare target to(update) \r
+#pragma omp end declare target\r
+\r
+int\r
+main ()\r
+{\r
+ for (i = 0; i < N; i++)\r
+ {\r
+ a[i] = i;\r
+ b[i] = i + 1;\r
+ c[i] = i + 2;\r
+ }\r
+\r
+ //__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);\r
+ \r
+ #pragma omp target map(to: i) map(tofrom: a, b, c) \r
+ {\r
+ update(); /* Device. */\r
+ }\r
+\r
+ //__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);\r
+\r
+ for (i = 0; i < N; i++)\r
+ if ( a[i] != i + 1 || b[i] != i + 3 || c[i] != i + 5)\r
+ __builtin_abort();\r
+\r
+ update(); /* Host. */\r
+\r
+ //__builtin_printf("i=5: A=%d, B=%d, C=%d\n", a[5], b[5], c[5]);\r
+\r
+ for (i = 0; i < N; i++)\r
+ if ( a[i] != i + 2 || b[i] != i + 5 || c[i] != i + 8)\r
+ __builtin_abort ();\r
+ \r
+ return 0;\r
+}\r