1 /* { dg-do compile } */ 2 /* { dg-require-effective-target tls } */ 3 4 #include <stdlib.h> 5 6 int thrglobalvar; 7 #pragma omp threadprivate (thrglobalvar) 8 int globalvar; 9 const int constvar = 8; 10 11 int foo(int x)12foo (int x) 13 { 14 return x; 15 } 16 17 int bar(int * x)18bar (int *x) 19 { 20 return *x; 21 } 22 23 int main(void)24main (void) 25 { 26 static int thrlocvar; 27 #pragma omp threadprivate (thrlocvar) 28 static int locvar; 29 static int *p; 30 int i, j, s, l; 31 32 p = malloc (sizeof (int)); 33 if (p == NULL) 34 return 0; 35 *p = 7; 36 s = 6; 37 l = 0; 38 #pragma omp parallel for /* { dg-error "enclosing parallel" } */ \ 39 default (none) private (p) shared (s) 40 for (i = 0; i < 64; i++) 41 { 42 int k = foo (0); /* Predetermined - private (automatic var declared */ 43 k++; /* in scope of construct). */ 44 thrglobalvar++; /* Predetermined - threadprivate. */ 45 thrlocvar++; /* Predetermined - threadprivate. */ 46 foo (i); /* Predetermined - private (omp for loop variable). */ 47 foo (constvar); /* Predetermined - shared (const qualified type). */ 48 foo (*p); /* *p predetermined - shared (heap allocated */ 49 (*p)++; /* storage). */ 50 bar (p); /* Explicitly determined - private. */ 51 foo (s); /* Explicitly determined - shared. */ 52 globalvar++; /* { dg-error "not specified in" } */ 53 locvar++; /* { dg-error "not specified in" } */ 54 l++; /* { dg-error "not specified in" } */ 55 for (j = 0; j < 2; j++); /* { dg-error "not specified in" } */ 56 } 57 return 0; 58 } 59