summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/gomp/sharing-1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/gomp/sharing-1.C')
-rw-r--r--gcc/testsuite/g++.dg/gomp/sharing-1.C77
1 files changed, 77 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/gomp/sharing-1.C b/gcc/testsuite/g++.dg/gomp/sharing-1.C
new file mode 100644
index 000000000..83b818098
--- /dev/null
+++ b/gcc/testsuite/g++.dg/gomp/sharing-1.C
@@ -0,0 +1,77 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target tls } */
+
+int thrglobalvar;
+#pragma omp threadprivate (thrglobalvar)
+int globalvar;
+const struct S
+{
+ int x;
+} constvar = { 8 };
+struct T
+{
+ static T t;
+ int i;
+};
+T T::t = { 6 };
+/* const qualified type, but mutable member -> not predetermined. */
+const struct U
+{
+ int x;
+ mutable int y;
+} constmutvar = { 6, 4 };
+
+int
+foo (int x)
+{
+ return x;
+}
+
+int
+bar (int *x)
+{
+ return *x;
+}
+
+int
+baz (U u)
+{
+ return u.x;
+}
+
+int
+main (void)
+{
+ static int thrlocvar;
+#pragma omp threadprivate (thrlocvar)
+ static int locvar;
+ static int *p;
+ int i, j, s, l;
+
+ p = new int;
+ *p = 7;
+ s = 6;
+ l = 0;
+#pragma omp parallel for /* { dg-error "enclosing parallel" } */ \
+ default (none) private (p) shared (s)
+ for (i = 0; i < 64; i++)
+ {
+ int k = foo (0); /* Predetermined - private (automatic var declared */
+ k++; /* in scope of construct). */
+ thrglobalvar++; /* Predetermined - threadprivate. */
+ thrlocvar++; /* Predetermined - threadprivate. */
+ foo (i); /* Predetermined - private (omp for loop variable). */
+ foo (constvar.x); /* Predetermined - shared (const qualified type). */
+ foo (T::t.i); /* Predetermined - shared (static data member). */
+ foo (*p); /* *p predetermined - shared (heap allocated */
+ (*p)++; /* storage). */
+ bar (p); /* Explicitly determined - private. */
+ foo (s); /* Explicitly determined - shared. */
+ globalvar++; /* { dg-error "not specified in" } */
+ locvar++; /* { dg-error "not specified in" } */
+ l++; /* { dg-error "not specified in" } */
+ for (j = 0; j < 2; j++); /* { dg-error "not specified in" } */
+ baz (constmutvar);/* { dg-error "not specified in" } */
+ }
+ return 0;
+}