diff libgomp/testsuite/libgomp.c/pr33880.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/pr33880.c	Fri Jul 17 14:47:48 2009 +0900
@@ -0,0 +1,123 @@
+/* PR middle-end/33880 */
+/* { dg-do run } */
+
+extern void abort (void);
+
+void
+test1 (void)
+{
+  int i = 0, j = 0;
+  void bar (void)
+  {
+    i++;
+    j++;
+  }
+  bar ();
+  #pragma omp parallel for num_threads(4)
+    for (i = 0; i < 100; i++)
+      #pragma omp atomic
+	j += 1;
+  if (j != 101)
+    abort ();
+  #pragma omp parallel for lastprivate(i) num_threads(2)
+    for (i = 0; i < 100; i++)
+      #pragma omp atomic
+	j += 1;
+  if (i != 100)
+    abort ();
+  i = 3;
+  bar ();
+  if (j != 202)
+    abort ();
+  if (i != 4)
+    abort ();
+}
+
+void
+test2 (void)
+{
+  int i = -1, j = 99, k, l = 9, m = 0;
+  void bar (void)
+  {
+    i++;
+    j++;
+    l++;
+    m++;
+  }
+  bar ();
+  #pragma omp parallel for num_threads(4)
+    for (k = i; k < j; k += l)
+      #pragma omp atomic
+	m += 1;
+  bar ();
+  if (i != 1 || j != 101 || l != 11 || m != 12)
+    abort ();
+}
+
+void
+test3 (void)
+{
+  int i, j, k, l, m;
+  void bar (void)
+  {
+  #pragma omp parallel for num_threads(4)
+    for (i = j; i < k; i += l)
+      #pragma omp atomic
+        m += 1;
+  }
+  void baz (void)
+  {
+  #pragma omp parallel for num_threads(2) lastprivate(i)
+    for (i = j; i < k * 2; i += l / 2)
+      #pragma omp atomic
+        m += 1;
+  }
+  i = 7;
+  j = 0;
+  k = 100;
+  l = 2;
+  m = 0;
+  bar ();
+  if (j != 0 || k != 100 || l != 2 || m != 50)
+    abort ();
+  baz ();
+  if (i != 200 || j != 0 || k != 100 || l != 2 || m != 250)
+    abort ();
+}
+
+void
+test4 (void)
+{
+  int i, j, k, l, m = 0;
+  int foo (void)
+  {
+    return j;
+  }
+  int bar (void)
+  {
+    return k;
+  }
+  int baz (void)
+  {
+    return l;
+  }
+  j = 0;
+  k = 1000;
+  l = 2;
+  #pragma omp parallel for num_threads(8) lastprivate(i)
+  for (i = foo (); i < bar (); i += baz ())
+    #pragma omp atomic
+      m += 1;
+  if (i != 1000 || m != 500 || j != 0 || k != 1000 || l != 2)
+    abort ();
+}
+
+int
+main (void)
+{
+  test1 ();
+  test2 ();
+  test3 ();
+  test4 ();
+  return 0;
+}