(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
depobj-1.c
       1  typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t {
       2    char __omp_depend_t__[2 * sizeof (void *)];
       3  } omp_depend_t;
       4  
       5  omp_depend_t bar (void);
       6  extern const omp_depend_t cdepobj;
       7  extern omp_depend_t depobj;
       8  extern omp_depend_t depobja[4];
       9  extern omp_depend_t *pdepobj;
      10  int a, b, i, j;
      11  
      12  void
      13  f1 (void)
      14  {
      15    #pragma omp depobj(depobj) depend(in : a)
      16    #pragma omp depobj(depobj) update(inout)
      17    #pragma omp task depend (depobj: depobj)
      18    ;
      19    #pragma omp depobj(depobj) destroy
      20    #pragma omp task depend (iterator (i=1:3) , depobj: *(depobja + i))
      21    ;
      22    #pragma omp depobj(pdepobj[0]) depend(mutexinoutset:a)
      23    #pragma omp depobj(*pdepobj) destroy
      24    #pragma omp depobj(depobja[0]) depend(inoutset: a)
      25    #pragma omp depobj(depobja[0]) update(mutexinoutset)
      26    #pragma omp depobj(depobja[0]) update(inoutset)
      27  }
      28  
      29  void
      30  f2 (void)
      31  {
      32    omp_depend_t depobjb[4];
      33    #pragma omp depobj					/* { dg-error "expected" } */
      34    #pragma omp depobj destroy				/* { dg-error "expected" } */
      35    #pragma omp depobj (depobj)				/* { dg-error "expected 'depend', 'destroy' or 'update' clause" } */
      36    #pragma omp depobj (depobj) foobar			/* { dg-error "expected 'depend', 'destroy' or 'update' clause" } */
      37    #pragma omp depobj(bar ()) update(inout)		/* { dg-error "'depobj' expression is not lvalue expression" } */
      38    #pragma omp depobj (cdepobj) update(in)		/* { dg-error "'const' qualified 'depobj' expression" } */
      39    #pragma omp depobj (depobjb) depend(in: a)		/* { dg-error "type of 'depobj' expression is not 'omp_depend_t'" } */
      40    #pragma omp depobj (pdepobj) depend(in: a)		/* { dg-error "type of 'depobj' expression is not 'omp_depend_t'" } */
      41    #pragma omp depobj (a) destroy			/* { dg-error "type of 'depobj' expression is not 'omp_depend_t'" } */
      42    #pragma omp depobj (depobj) depend(depobj:a)		/* { dg-error "does not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" } */
      43    #pragma omp depobj (depobj) depend(depobj:*depobjb)	/* { dg-error "'depobj' dependence type specified in 'depend' clause on 'depobj' construct" } */
      44    #pragma omp depobj (depobj) update(foobar)		/* { dg-error "expected 'in', 'out', 'inout', 'mutexinoutset' or 'inoutset'" } */
      45    #pragma omp depobj (depobj) depend(in: *depobja)	/* { dg-error "should not have 'omp_depend_t' type in 'depend' clause with dependence type" } */
      46    #pragma omp depobj (depobj) depend(in: a) depend(in: b)	/* { dg-error "expected" } */
      47    #pragma omp depobj (depobj) depend(in: a) update(out)	/* { dg-error "expected" } */
      48    #pragma omp depobj (depobj) depend(in: a, b)		/* { dg-error "more than one locator in 'depend' clause on 'depobj' construct" } */
      49    #pragma omp depobj (depobj) depend(source)		/* { dg-error "'depend\\(source\\)' is only allowed in 'omp ordered'" } */
      50    #pragma omp depobj (depobj) depend(sink: i + 1, j - 1)	/* { dg-error "'depend\\(sink\\)' is only allowed in 'omp ordered'" } */
      51    #pragma omp depobj (depobj) depend(iterator (i = 0:2) , in : a)	/* { dg-error "'iterator' modifier may not be specified on 'depobj' construct" } */
      52    if (0)
      53      #pragma omp depobj (depobj) destroy			/* { dg-error "'#pragma omp depobj' may only be used in compound statements" } */
      54      ;
      55  }
      56  
      57  void
      58  f3 (void)
      59  {
      60    #pragma omp task depend (depobj: depobja[1:2])	/* { dg-error "'depend' clause with 'depobj' dependence type on array section" } */
      61    ;
      62    #pragma omp task depend (depobj: a)			/* { dg-error "'a' does not have 'omp_depend_t' type in 'depend' clause with 'depobj' dependence type" } */
      63    ;
      64    #pragma omp task depend (in: depobj)			/* { dg-error "'depobj' should not have 'omp_depend_t' type in 'depend' clause with dependence type" } */
      65    ;
      66  }