aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a
diff options
context:
space:
mode:
authorBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
committerBen Cheng <bccheng@google.com>2014-03-25 22:37:19 -0700
commit1bc5aee63eb72b341f506ad058502cd0361f0d10 (patch)
treec607e8252f3405424ff15bc2d00aa38dadbb2518 /gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a
parent283a0bf58fcf333c58a2a92c3ebbc41fb9eb1fdb (diff)
downloadtoolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.gz
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.tar.bz2
toolchain_gcc-1bc5aee63eb72b341f506ad058502cd0361f0d10.zip
Initial checkin of GCC 4.9.0 from trunk (r208799).
Change-Id: I48a3c08bb98542aa215912a75f03c0890e497dba
Diffstat (limited to 'gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a')
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c10
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c41
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.2.c20
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.1.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.2.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.2.c22
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.3.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.1.c11
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.2.c11
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.24.1.c35
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.26.2.c21
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.27.1.c15
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.30.1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.1.c17
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c27
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c26
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c25
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c29
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c23
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.2.c25
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.3.c19
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c18
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.5.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c16
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.1.c13
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.2.c14
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c17
-rw-r--r--gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c18
34 files changed, 691 insertions, 0 deletions
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c
new file mode 100644
index 000000000..f7f2924ce
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.1.1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+
+void
+a1 (int n, float *a, float *b)
+{
+ int i;
+#pragma omp parallel for
+ for (i = 1; i < n; i++) /* i is private by default */
+ b[i] = (a[i] + a[i - 1]) / 2.0;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c
new file mode 100644
index 000000000..750bc378c
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.10.1.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+
+#include <stdio.h>
+void
+work1 ()
+{
+}
+
+void
+work2 ()
+{
+}
+void
+a10 ()
+{
+#pragma omp parallel
+ {
+#pragma omp single
+ printf ("Beginning work1.\n");
+ work1 ();
+#pragma omp single
+ printf ("Finishing work1.\n");
+#pragma omp single nowait
+ printf ("Finished work1 and beginning work2.\n");
+ work2 ();
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c
new file mode 100644
index 000000000..fab948dd7
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.12.1.c
@@ -0,0 +1,41 @@
+/* { dg-do compile } */
+
+#include <stdio.h>
+extern float average (float, float, float);
+void
+a12 (float *x, float *xold, int n, float tol)
+{
+ int c, i, toobig;
+ float error, y;
+ c = 0;
+#pragma omp parallel
+ {
+ do
+ {
+#pragma omp for private(i)
+ for (i = 1; i < n - 1; ++i)
+ {
+ xold[i] = x[i];
+ }
+#pragma omp single
+ {
+ toobig = 0;
+ }
+#pragma omp for private(i,y,error) reduction(+:toobig)
+ for (i = 1; i < n - 1; ++i)
+ {
+ y = x[i];
+ x[i] = average (xold[i - 1], x[i], xold[i + 1]);
+ error = y - x[i];
+ if (error > tol || error < -tol)
+ ++toobig;
+ }
+#pragma omp master
+ {
+ ++c;
+ printf ("iteration %d, toobig=%d\n", c, toobig);
+ }
+ }
+ while (toobig > 0);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c
new file mode 100644
index 000000000..cc0fcc25d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.13.1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+int dequeue (float *a);
+void work (int i, float *a);
+void
+a13 (float *x, float *y)
+{
+ int ix_next, iy_next;
+#pragma omp parallel shared(x, y) private(ix_next, iy_next)
+ {
+#pragma omp critical (xaxis)
+ ix_next = dequeue (x);
+ work (ix_next, x);
+#pragma omp critical (yaxis)
+ iy_next = dequeue (y);
+ work (iy_next, y);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c
new file mode 100644
index 000000000..14a7ed0bd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.14.1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+
+void
+a14 ()
+{
+ int i = 1;
+#pragma omp parallel sections
+ {
+#pragma omp section
+ {
+#pragma omp critical (name)
+ {
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ i++;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c
new file mode 100644
index 000000000..c460f7566
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.1.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+void
+a17_1_wrong ()
+{
+ union
+ {
+ int n;
+ float x;
+ } u;
+#pragma omp parallel
+ {
+#pragma omp atomic
+ u.n++;
+#pragma omp atomic
+ u.x += 1.0;
+/* Incorrect because the atomic constructs reference the same location
+ through incompatible types */
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.2.c
new file mode 100644
index 000000000..aaaec7ea3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.17.2.c
@@ -0,0 +1,20 @@
+/* { dg-do compile } */
+
+void
+a17_2_wrong ()
+{
+ int x;
+ int *i;
+ float *r;
+ i = &x;
+ r = (float *) &x;
+#pragma omp parallel
+ {
+#pragma omp atomic
+ *i += 1;
+#pragma omp atomic
+ *r += 1.0;
+/* Incorrect because the atomic constructs reference the same location
+ through incompatible types */
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.1.c
new file mode 100644
index 000000000..d43e0cf45
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+void
+a20_wrong ()
+{
+ int a = 1;
+#pragma omp parallel
+ {
+ if (a != 0)
+#pragma omp flush(a) /* { dg-error "'#pragma omp flush' may only" } */
+/* incorrect as flush cannot be immediate substatement
+ of if statement */
+ if (a != 0)
+#pragma omp barrier /* { dg-error "'#pragma omp barrier' may only" } */
+/* incorrect as barrier cannot be immediate substatement
+ of if statement */
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.2.c
new file mode 100644
index 000000000..4f1138356
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.20.2.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+void
+a20 ()
+{
+ int a = 1;
+#pragma omp parallel
+ {
+ if (a != 0)
+ {
+#pragma omp flush(a)
+ }
+ if (a != 0)
+ {
+#pragma omp barrier
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.2.c
new file mode 100644
index 000000000..a9b81d0c3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.2.c
@@ -0,0 +1,22 @@
+/* { dg-do compile } */
+
+void
+work (int i)
+{
+}
+
+void
+a21_wrong (int n)
+{
+ int i;
+#pragma omp for ordered
+ for (i = 0; i < n; i++)
+ {
+/* incorrect because an iteration may not execute more than one
+ ordered region */
+#pragma omp ordered
+ work (i);
+#pragma omp ordered
+ work (i + 1);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.3.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.3.c
new file mode 100644
index 000000000..4d1ed6a52
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.21.3.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+
+void work (int);
+
+void
+a21_good (int n)
+{
+ int i;
+#pragma omp for ordered
+ for (i = 0; i < n; i++)
+ {
+ if (i <= 10)
+ {
+#pragma omp ordered
+ work (i);
+ }
+ if (i > 10)
+ {
+#pragma omp ordered
+ work (i + 1);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.1.c
new file mode 100644
index 000000000..e3586838a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.1.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+int counter = 0;
+#pragma omp threadprivate(counter)
+int
+increment_counter ()
+{
+ counter++;
+ return (counter);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.2.c
new file mode 100644
index 000000000..7a6e901a8
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.22.2.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+int
+increment_counter_2 ()
+{
+ static int counter = 0;
+#pragma omp threadprivate(counter)
+ counter++;
+ return (counter);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.24.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.24.1.c
new file mode 100644
index 000000000..9d8baa37f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.24.1.c
@@ -0,0 +1,35 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+extern int omp_get_num_threads (void);
+int x, y, t, z[1000];
+#pragma omp threadprivate(x)
+void
+a24 (int a)
+{
+ const int c = 1;
+ int i = 0;
+ int l = 0;
+#pragma omp parallel default(none) private(a) shared(z)
+ {
+ int j = omp_get_num_threads ();
+ /* O.K. - j is declared within parallel region */
+ /* O.K. - a is listed in private clause */
+ /* - z is listed in shared clause */
+ x = c; /* O.K. - x is threadprivate */
+ /* - c has const-qualified type */
+ z[i] = y;
+ /* { dg-error "'i' not specified" "" { target *-*-* } 21 } */
+ /* { dg-error "enclosing parallel" "" { target *-*-* } 13 } */
+ /* { dg-error "'y' not specified" "" { target *-*-* } 21 } */
+#pragma omp for firstprivate(y)
+ for (i = 0; i < 10; i++)
+ {
+ z[i] = y; /* O.K. - i is the loop iteration variable */
+ /* - y is listed in firstprivate clause */
+ }
+ z[l] = t;
+ /* { dg-error "'l' not specified" "" { target *-*-* } 31 } */
+ /* { dg-error "'t' not specified" "" { target *-*-* } 31 } */
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.26.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.26.2.c
new file mode 100644
index 000000000..b655edc10
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.26.2.c
@@ -0,0 +1,21 @@
+/* { dg-do compile } */
+/* { dg-options "-fopenmp -std=c99" } */
+
+int a;
+void
+g (int k)
+{
+ a = k; /* The global "a", not the private "a" in f */
+}
+
+void
+f (int n)
+{
+ int a = 0;
+#pragma omp parallel for private(a)
+ for (int i = 1; i < n; i++)
+ {
+ a = i;
+ g (a * 2); /* Private copy of "a" */
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.27.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.27.1.c
new file mode 100644
index 000000000..faa6ac621
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.27.1.c
@@ -0,0 +1,15 @@
+/* { dg-do compile } */
+
+void
+a27 ()
+{
+ int i, a;
+#pragma omp parallel private(a)
+ {
+#pragma omp parallel for private(a)
+ for (i = 0; i < 10; i++)
+ {
+ /* do work here */
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.30.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.30.1.c
new file mode 100644
index 000000000..e34be4c42
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.30.1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+void
+a30 (int n, float *a, float *b)
+{
+ int i;
+#pragma omp parallel
+ {
+#pragma omp for lastprivate(i)
+ for (i = 0; i < n - 1; i++)
+ a[i] = b[i] + b[i + 1];
+ }
+ a[i] = b[i]; /* i == n-1 here */
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.1.c
new file mode 100644
index 000000000..cbb3f60df
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+void
+a31_1 (float *x, int *y, int n)
+{
+ int i, b;
+ float a;
+ a = 0.0;
+ b = 0;
+#pragma omp parallel for private(i) shared(x, y, n) \
+ reduction(+:a) reduction(^:b)
+ for (i = 0; i < n; i++)
+ {
+ a += x[i];
+ b ^= y[i];
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c
new file mode 100644
index 000000000..f9da3f4fc
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.31.2.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+
+void
+a31_2 (float *x, int *y, int n)
+{
+ int i, b, b_p;
+ float a, a_p;
+ a = 0.0;
+ b = 0;
+#pragma omp parallel shared(a, b, x, y, n) \
+ private(a_p, b_p)
+ {
+ a_p = 0.0;
+ b_p = 0;
+#pragma omp for private(i)
+ for (i = 0; i < n; i++)
+ {
+ a_p += x[i];
+ b_p ^= y[i];
+ }
+#pragma omp critical
+ {
+ a += a_p;
+ b ^= b_p;
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c
new file mode 100644
index 000000000..d2cb316f3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.32.1.c
@@ -0,0 +1,27 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+#include <stdlib.h>
+float *work;
+int size;
+float tol;
+void build (void);
+#pragma omp threadprivate(work,size,tol)
+void
+a32 (float t, int n)
+{
+ tol = t;
+ size = n;
+#pragma omp parallel copyin(tol,size)
+ {
+ build ();
+ }
+}
+void
+build ()
+{
+ int i;
+ work = (float *) malloc (sizeof (float) * size);
+ for (i = 0; i < size; ++i)
+ work[i] = tol;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c
new file mode 100644
index 000000000..99c06da6a
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.1.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+#include <stdio.h>
+float x, y;
+#pragma omp threadprivate(x, y)
+void
+init (float a, float b)
+{
+#pragma omp single copyprivate(a,b,x,y)
+ {
+ scanf ("%f %f %f %f", &a, &b, &x, &y);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c
new file mode 100644
index 000000000..a0da739dd
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.33.2.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+
+#include <stdio.h>
+#include <stdlib.h>
+float
+read_next ()
+{
+ float *tmp;
+ float return_val;
+#pragma omp single copyprivate(tmp)
+ {
+ tmp = (float *) malloc (sizeof (float));
+ } /* copies the pointer only */
+#pragma omp master
+ {
+ scanf ("%f", tmp);
+ }
+#pragma omp barrier
+ return_val = *tmp;
+#pragma omp barrier
+#pragma omp single nowait
+ {
+ free (tmp);
+ }
+ return return_val;
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c
new file mode 100644
index 000000000..e5ae7a61e
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.1.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+
+void
+work (int i, int j)
+{
+}
+
+void
+good_nesting (int n)
+{
+ int i, j;
+#pragma omp parallel default(shared)
+ {
+#pragma omp for
+ for (i = 0; i < n; i++)
+ {
+#pragma omp parallel shared(i, n)
+ {
+#pragma omp for
+ for (j = 0; j < n; j++)
+ work (i, j);
+ }
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c
new file mode 100644
index 000000000..7cc265fec
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.34.2.c
@@ -0,0 +1,29 @@
+/* { dg-do compile } */
+
+void
+work (int i, int j)
+{
+}
+
+void
+work1 (int i, int n)
+{
+ int j;
+#pragma omp parallel default(shared)
+ {
+#pragma omp for
+ for (j = 0; j < n; j++)
+ work (i, j);
+ }
+}
+void
+good_nesting2 (int n)
+{
+ int i;
+#pragma omp parallel default(shared)
+ {
+#pragma omp for
+ for (i = 0; i < n; i++)
+ work1 (i, n);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c
new file mode 100644
index 000000000..f2c4a672f
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.1.c
@@ -0,0 +1,23 @@
+/* { dg-do compile } */
+
+void
+work (int i, int j)
+{
+}
+
+void
+wrong1 (int n)
+{
+#pragma omp parallel default(shared)
+ {
+ int i, j;
+#pragma omp for
+ for (i = 0; i < n; i++)
+ {
+ /* incorrect nesting of loop regions */
+#pragma omp for /* { dg-error "may not be closely nested" } */
+ for (j = 0; j < n; j++)
+ work (i, j);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.2.c
new file mode 100644
index 000000000..165c86e27
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.2.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+
+void work (int, int);
+
+void
+work1 (int i, int n)
+{
+ int j;
+ /* incorrect nesting of loop regions */
+#pragma omp for
+ for (j = 0; j < n; j++)
+ work (i, j);
+}
+
+void
+wrong2 (int n)
+{
+#pragma omp parallel default(shared)
+ {
+ int i;
+#pragma omp for
+ for (i = 0; i < n; i++)
+ work1 (i, n);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.3.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.3.c
new file mode 100644
index 000000000..64005b307
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.3.c
@@ -0,0 +1,19 @@
+/* { dg-do compile } */
+
+void work (int, int);
+
+void
+wrong3 (int n)
+{
+#pragma omp parallel default(shared)
+ {
+ int i;
+#pragma omp for
+ for (i = 0; i < n; i++)
+ {
+/* incorrect nesting of regions */
+#pragma omp single /* { dg-error "may not be closely nested" } */
+ work (i, 0);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c
new file mode 100644
index 000000000..5bb6b80b3
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.4.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+void
+wrong4 (int n)
+{
+#pragma omp parallel default(shared)
+ {
+ int i;
+#pragma omp for
+ for (i = 0; i < n; i++)
+ {
+ work (i, 0);
+ /* incorrect nesting of barrier region in a loop region */
+#pragma omp barrier /* { dg-error "may not be closely nested" } */
+ work (i, 1);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.5.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.5.c
new file mode 100644
index 000000000..7b4aee1c0
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.5.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+void
+wrong5 (int n)
+{
+#pragma omp parallel
+ {
+#pragma omp critical
+ {
+ work (n, 0);
+/* incorrect nesting of barrier region in a critical region */
+#pragma omp barrier /* { dg-error "may not be closely nested" } */
+ work (n, 1);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c
new file mode 100644
index 000000000..d18188b17
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.35.6.c
@@ -0,0 +1,16 @@
+/* { dg-do compile } */
+
+void
+wrong6 (int n)
+{
+#pragma omp parallel
+ {
+#pragma omp single
+ {
+ work (n, 0);
+/* incorrect nesting of barrier region in a single region */
+#pragma omp barrier /* { dg-error "may not be closely nested" } */
+ work (n, 1);
+ }
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.1.c
new file mode 100644
index 000000000..3581ee27d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.1.c
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+
+extern int omp_get_num_threads (void);
+void work (int i);
+void
+incorrect ()
+{
+ int np, i;
+ np = omp_get_num_threads (); /* misplaced */
+#pragma omp parallel for schedule(static)
+ for (i = 0; i < np; i++)
+ work (i);
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.2.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.2.c
new file mode 100644
index 000000000..64256c78d
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.37.2.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+
+extern int omp_get_thread_num (void);
+void work (int i);
+void
+correct ()
+{
+ int i;
+#pragma omp parallel private(i)
+ {
+ i = omp_get_thread_num ();
+ work (i);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c
new file mode 100644
index 000000000..eed21b367
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.8.1.c
@@ -0,0 +1,17 @@
+/* { dg-do compile } */
+
+#include <math.h>
+void
+a8 (int n, int m, float *a, float *b, float *y, float *z)
+{
+ int i;
+#pragma omp parallel
+ {
+#pragma omp for nowait
+ for (i = 1; i < n; i++)
+ b[i] = (a[i] + a[i - 1]) / 2.0;
+#pragma omp for nowait
+ for (i = 0; i < m; i++)
+ y[i] = sqrt (z[i]);
+ }
+}
diff --git a/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c
new file mode 100644
index 000000000..45be33f16
--- /dev/null
+++ b/gcc-4.9/gcc/testsuite/gcc.dg/gomp/appendix-a/a.9.1.c
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+void XAXIS ();
+void YAXIS ();
+void ZAXIS ();
+void
+a9 ()
+{
+#pragma omp parallel sections
+ {
+#pragma omp section
+ XAXIS ();
+#pragma omp section
+ YAXIS ();
+#pragma omp section
+ ZAXIS ();
+ }
+}