/* { dg-do compile } */
|
/* { dg-do compile } */
|
/* { dg-require-effective-target tls } */
|
/* { dg-require-effective-target tls } */
|
|
|
int thrglobalvar;
|
int thrglobalvar;
|
#pragma omp threadprivate (thrglobalvar)
|
#pragma omp threadprivate (thrglobalvar)
|
int globalvar;
|
int globalvar;
|
const struct S
|
const struct S
|
{
|
{
|
int x;
|
int x;
|
} constvar = { 8 };
|
} constvar = { 8 };
|
struct T
|
struct T
|
{
|
{
|
static T t;
|
static T t;
|
int i;
|
int i;
|
};
|
};
|
T T::t = { 6 };
|
T T::t = { 6 };
|
/* const qualified type, but mutable member -> not predetermined. */
|
/* const qualified type, but mutable member -> not predetermined. */
|
const struct U
|
const struct U
|
{
|
{
|
int x;
|
int x;
|
mutable int y;
|
mutable int y;
|
} constmutvar = { 6, 4 };
|
} constmutvar = { 6, 4 };
|
|
|
int
|
int
|
foo (int x)
|
foo (int x)
|
{
|
{
|
return x;
|
return x;
|
}
|
}
|
|
|
int
|
int
|
bar (int *x)
|
bar (int *x)
|
{
|
{
|
return *x;
|
return *x;
|
}
|
}
|
|
|
int
|
int
|
baz (U u)
|
baz (U u)
|
{
|
{
|
return u.x;
|
return u.x;
|
}
|
}
|
|
|
int
|
int
|
main (void)
|
main (void)
|
{
|
{
|
static int thrlocvar;
|
static int thrlocvar;
|
#pragma omp threadprivate (thrlocvar)
|
#pragma omp threadprivate (thrlocvar)
|
static int locvar;
|
static int locvar;
|
static int *p;
|
static int *p;
|
int i, j, s, l;
|
int i, j, s, l;
|
|
|
p = new int;
|
p = new int;
|
*p = 7;
|
*p = 7;
|
s = 6;
|
s = 6;
|
l = 0;
|
l = 0;
|
#pragma omp parallel for /* { dg-error "enclosing parallel" } */ \
|
#pragma omp parallel for /* { dg-error "enclosing parallel" } */ \
|
default (none) private (p) shared (s)
|
default (none) private (p) shared (s)
|
for (i = 0; i < 64; i++)
|
for (i = 0; i < 64; i++)
|
{
|
{
|
int k = foo (0); /* Predetermined - private (automatic var declared */
|
int k = foo (0); /* Predetermined - private (automatic var declared */
|
k++; /* in scope of construct). */
|
k++; /* in scope of construct). */
|
thrglobalvar++; /* Predetermined - threadprivate. */
|
thrglobalvar++; /* Predetermined - threadprivate. */
|
thrlocvar++; /* Predetermined - threadprivate. */
|
thrlocvar++; /* Predetermined - threadprivate. */
|
foo (i); /* Predetermined - private (omp for loop variable). */
|
foo (i); /* Predetermined - private (omp for loop variable). */
|
foo (constvar.x); /* Predetermined - shared (const qualified type). */
|
foo (constvar.x); /* Predetermined - shared (const qualified type). */
|
foo (T::t.i); /* Predetermined - shared (static data member). */
|
foo (T::t.i); /* Predetermined - shared (static data member). */
|
foo (*p); /* *p predetermined - shared (heap allocated */
|
foo (*p); /* *p predetermined - shared (heap allocated */
|
(*p)++; /* storage). */
|
(*p)++; /* storage). */
|
bar (p); /* Explicitly determined - private. */
|
bar (p); /* Explicitly determined - private. */
|
foo (s); /* Explicitly determined - shared. */
|
foo (s); /* Explicitly determined - shared. */
|
globalvar++; /* { dg-error "not specified in" } */
|
globalvar++; /* { dg-error "not specified in" } */
|
locvar++; /* { dg-error "not specified in" } */
|
locvar++; /* { dg-error "not specified in" } */
|
l++; /* { dg-error "not specified in" } */
|
l++; /* { dg-error "not specified in" } */
|
for (j = 0; j < 2; j++); /* { dg-error "not specified in" } */
|
for (j = 0; j < 2; j++); /* { dg-error "not specified in" } */
|
baz (constmutvar);/* { dg-error "not specified in" } */
|
baz (constmutvar);/* { dg-error "not specified in" } */
|
}
|
}
|
return 0;
|
return 0;
|
}
|
}
|
|
|