]> oss.titaniummirror.com Git - msp430-gcc.git/blobdiff - libgomp/testsuite/libgomp.c/critical-2.c
Imported gcc-4.4.3
[msp430-gcc.git] / libgomp / testsuite / libgomp.c / critical-2.c
diff --git a/libgomp/testsuite/libgomp.c/critical-2.c b/libgomp/testsuite/libgomp.c/critical-2.c
new file mode 100644 (file)
index 0000000..530a891
--- /dev/null
@@ -0,0 +1,35 @@
+// { dg-do run }
+// Test several constructs within a parallel.  At one point in development,
+// the critical directive clobbered the shared clause of the parallel.
+
+#include <omp.h>
+#include <stdlib.h>
+
+#define N       2000
+
+int main()
+{
+  int A[N];
+  int nthreads;
+  int i;
+
+#pragma omp parallel shared (A, nthreads)
+  {
+    #pragma omp master
+      nthreads = omp_get_num_threads ();
+
+    #pragma omp for
+      for (i = 0; i < N; i++)
+        A[i] = 0;
+
+    #pragma omp critical
+      for (i = 0; i < N; i++)
+        A[i] += 1;
+  }
+
+  for (i = 0; i < N; i++)
+    if (A[i] != nthreads)
+      abort ();
+
+  return 0;
+}