]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.c/shared-1.c
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.c / shared-1.c
diff --git a/libgomp/testsuite/libgomp.c/shared-1.c b/libgomp/testsuite/libgomp.c/shared-1.c
new file mode 100644 (file)
index 0000000..f7d4fb2
--- /dev/null
@@ -0,0 +1,58 @@
+extern void abort (void);
+
+struct Y
+{
+  int l[5][10];
+};
+
+struct X
+{
+  struct Y y;
+  float b[10];
+};
+
+void
+parallel (int a, int b)
+{
+  int i, j;
+  struct X A[10][5];
+  a = b = 3;
+
+  for (i = 0; i < 10; i++)
+    for (j = 0; j < 5; j++)
+      A[i][j].y.l[3][3] = -10;
+
+  #pragma omp parallel shared (a, b, A) num_threads (5)
+    {
+      int i, j;
+
+      #pragma omp atomic
+      a += omp_get_num_threads ();
+
+      #pragma omp atomic
+      b += omp_get_num_threads ();
+
+      #pragma omp for private (j)
+      for (i = 0; i < 10; i++)
+       for (j = 0; j < 5; j++)
+         A[i][j].y.l[3][3] += 20;
+
+    }
+
+  for (i = 0; i < 10; i++)
+    for (j = 0; j < 5; j++)
+      if (A[i][j].y.l[3][3] != 10)
+       abort ();
+
+  if (a != 28)
+    abort ();
+
+  if (b != 28)
+    abort ();
+}
+
+main()
+{
+  parallel (1, 2);
+  return 0;
+}