(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
gomp/
_Atomic-5.c
       1  /* PR c/65467 */
       2  /* { dg-do compile } */
       3  /* { dg-additional-options "-std=c11" } */
       4  
       5  void
       6  f1 (void)
       7  {
       8    struct S { int a; int b[2]; _Atomic int *c; };
       9    _Atomic int a = 0, b[2];
      10    _Atomic int d[3];
      11    _Atomic struct S c = (struct S) { 3, { 4, 5 }, d };
      12    int *_Atomic p;
      13    _Atomic int *q;
      14    int e[3] = { 1, 2, 3 };
      15    b[0] = 1;
      16    b[1] = 2;
      17    d[0] = 6;
      18    d[1] = 7;
      19    d[2] = 8;
      20    p = e;
      21    #pragma omp target map(tofrom: a)		/* { dg-error "'_Atomic' 'a' in 'map' clause" } */
      22    ;
      23    #pragma omp target map(to: b)			/* { dg-error "'_Atomic' 'b' in 'map' clause" } */
      24    ;
      25    #pragma omp target map(from: b[1:1])		/* { dg-error "'_Atomic' 'b' in 'map' clause" } */
      26    ;
      27    #pragma omp target map(to: c.a)		/* { dg-error "'_Atomic' 'c.a' in 'map' clause" } */
      28    /* { dg-warning "accessing a member 'a' of an atomic structure 'c'" "" { target *-*-* } .-1 } */
      29    ;
      30    #pragma omp target map(to: c.b[1])		/* { dg-error "'_Atomic' 'c.b' in 'map' clause" } */
      31    /* { dg-warning "accessing a member 'b' of an atomic structure 'c'" "" { target *-*-* } .-1 } */
      32    ;
      33    #pragma omp target data map(c)		/* { dg-error "'_Atomic' 'c' in 'map' clause" } */
      34    /* { dg-error "must contain at least one" "" { target *-*-* } .-1 } */
      35    {
      36      #pragma omp target update to (c.a)		/* { dg-error "'_Atomic' 'c.a' in 'to' clause" } */
      37      /* { dg-error "must contain at least one" "" { target *-*-* } .-1 } */
      38      /* { dg-warning "accessing a member 'a' of an atomic structure 'c'" "" { target *-*-* } .-2 } */
      39      #pragma omp target update from (c.b[1])	/* { dg-error "'_Atomic' 'c.b' in 'from' clause" } */
      40      /* { dg-error "must contain at least one" "" { target *-*-* } .-1 } */
      41      /* { dg-warning "accessing a member 'b' of an atomic structure 'c'" "" { target *-*-* } .-2 } */
      42      #pragma omp target update to (c)		/* { dg-error "'_Atomic' 'c' in 'to' clause" } */
      43      /* { dg-error "must contain at least one" "" { target *-*-* } .-1 } */
      44    }
      45    #pragma omp target map(to: c.c[0:])		/* { dg-error "'_Atomic' 'c.c' in 'map' clause" } */
      46    /* { dg-warning "accessing a member 'c' of an atomic structure 'c'" "" { target *-*-* } .-1 } */
      47    ;
      48    #pragma omp target map(to: p[1:2])		/* { dg-error "'_Atomic' 'p' in 'map' clause" } */
      49    ;
      50    #pragma omp target map(to: q[1:2])		/* { dg-error "'_Atomic' '\[^\n\r]*' in 'map' clause" } */
      51    ;
      52  }
      53  
      54  void
      55  f2 (void)
      56  {
      57    _Atomic int a = 0, b[2] = { 1, 2 };
      58    #pragma omp target defaultmap(tofrom:scalar)	/* { dg-error "'_Atomic' 'a' in implicit 'map' clause" } */
      59    a++;
      60    #pragma omp target				/* { dg-error "'_Atomic' 'b' in implicit 'map' clause" } */
      61    b[0]++;
      62  }
      63  
      64  void
      65  f3 (void)
      66  {
      67    _Atomic int a = 0, b[2] = { 1, 2 };
      68    #pragma omp target				/* { dg-error "'_Atomic' 'a' in implicit 'firstprivate' clause on 'target' construct" } */
      69    a++;
      70    #pragma omp target firstprivate (a)		/* { dg-error "'_Atomic' 'a' in 'firstprivate' clause on 'target' construct" } */
      71    a++;
      72    #pragma omp target firstprivate (b)		/* { dg-error "'_Atomic' 'b' in 'firstprivate' clause on 'target' construct" } */
      73    b[0]++;
      74  }