diff libgomp/testsuite/libgomp.c/vla-1.c @ 0:a06113de4d67

first commit
author kent <kent@cr.ie.u-ryukyu.ac.jp>
date Fri, 17 Jul 2009 14:47:48 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libgomp/testsuite/libgomp.c/vla-1.c	Fri Jul 17 14:47:48 2009 +0900
@@ -0,0 +1,60 @@
+/* { dg-do run } */
+
+#include <omp.h>
+#include <stdlib.h>
+#include <string.h>
+
+int
+main (int argc, char **argv[])
+{
+  int n = argc < 5 ? 12 : 31, i, m, l;
+  char a[n + 3];
+  unsigned short b[n / 2 - 1];
+  int c[n * 2 + 1];
+
+  for (i = 0; i < n + 3; i++)
+    a[i] = i;
+  for (i = 0; i < n / 2 - 1; i++)
+    b[i] = (i << 8) | i;
+  for (i = 0; i < n * 2 + 1; i++)
+    c[i] = (i << 24) | i;
+  l = 0;
+  m = n;
+#pragma omp parallel default (shared) num_threads (4) \
+  firstprivate (a, m) private (b, i) reduction (+:l)
+  {
+    for (i = 0; i < m + 3; i++)
+      if (a[i] != i)
+	l++;
+    for (i = 0; i < m * 2 + 1; i++)
+      if (c[i] != ((i << 24) | i))
+	l++;
+#pragma omp barrier
+    memset (a, omp_get_thread_num (), m + 3);
+    for (i = 0; i < m / 2 - 1; i++)
+      b[i] = a[0] + 7;
+#pragma omp master
+    {
+      for (i = 0; i < m * 2 + 1; i++)
+	c[i] = a[0] + 16;
+    }
+#pragma omp barrier
+    if (a[0] != omp_get_thread_num ())
+      l++;
+    for (i = 1; i < m + 3; i++)
+      if (a[i] != a[0])
+	l++;
+    for (i = 0; i < m / 2 - 1; i++)
+      if (b[i] != a[0] + 7)
+	l++;
+    for (i = 0; i < m * 2 + 1; i++)
+      if (c[i] != 16)
+	l++;
+  }
+  if (l)
+    abort ();
+  for (i = 0; i < n * 2 + 1; i++)
+    if (c[i] != 16)
+      l++;
+  return 0;
+}