1  /* PR libgomp/59467 */
       2  
       3  int v;
       4  
       5  void
       6  foo (void)
       7  {
       8    int x = 0, y = 0;
       9    #pragma omp parallel
      10    {
      11      int z;
      12      #pragma omp single copyprivate (x)	/* { dg-error "is not threadprivate or private in outer context" } */
      13      {
      14        #pragma omp atomic write
      15  	x = 6;
      16      }
      17      #pragma omp atomic read
      18      z = x;
      19      #pragma omp atomic
      20      y += z;
      21    }
      22    #pragma omp parallel
      23    {
      24      int z;
      25      #pragma omp single copyprivate (v)	/* { dg-error "is not threadprivate or private in outer context" } */
      26      {
      27        #pragma omp atomic write
      28  	v = 6;
      29      }
      30      #pragma omp atomic read
      31      z = v;
      32      #pragma omp atomic
      33      y += z;
      34    }
      35    #pragma omp parallel private (x)
      36    {
      37      int z;
      38      #pragma omp single copyprivate (x)
      39      {
      40        #pragma omp atomic write
      41  	x = 6;
      42      }
      43      #pragma omp atomic read
      44      z = x;
      45      #pragma omp atomic
      46      y += z;
      47    }
      48    x = 0;
      49    #pragma omp parallel reduction (+:x)
      50    {
      51      #pragma omp single copyprivate (x)
      52      {
      53        #pragma omp atomic write
      54  	x = 6;
      55      }
      56      #pragma omp atomic
      57      y += x;
      58    }
      59    #pragma omp single copyprivate (x)
      60    {
      61      x = 7;
      62    }
      63    #pragma omp single copyprivate (v)	/* { dg-error "is not threadprivate or private in outer context" } */
      64    {
      65      #pragma omp atomic write
      66        v = 6;
      67    }
      68  }