(root)/
gcc-13.2.0/
gcc/
testsuite/
c-c++-common/
gomp/
sink-1.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-fopenmp -Wunknown-pragmas -Werror" } */
       3  
       4  extern void bark (void);
       5  int i,j,k;
       6  int array[555];
       7  
       8  int
       9  main()
      10  {
      11  #pragma omp parallel for ordered(2)
      12    for (i=0; i < 100; ++i)
      13      for (j=0; j < 100; ++j)
      14        {
      15  /* OUT variant does not apply to ORDERED construct.  */
      16  #pragma omp ordered depend(out:i) /* { dg-error "invalid depend kind" } */
      17  
      18  /* depend(sink...) is allowed without an offset.  */
      19  #pragma omp ordered depend(sink:i,j-1)
      20  
      21  #pragma omp ordered depend(sink:i-1,j+2)
      22        bark ();
      23        }
      24  
      25  /* depend(sink...) does not apply to `omp task'.  */
      26  #pragma omp task depend(sink:i+3) /* { dg-error "only allowed in 'omp ordered'" } */
      27    bark();
      28  
      29  #pragma omp ordered depend(source) /* { dg-error "'depend' clause must be closely nested" } */
      30  
      31  #pragma omp parallel for ordered(2)
      32    for (i=0; i < 100; ++i)
      33      for (j=0; j < 100; ++j)
      34        {
      35  /* Multiple depend(source) allowed.  */
      36  #pragma omp ordered depend(source)
      37  #pragma omp ordered depend(source)
      38        }
      39  
      40  #pragma omp parallel for ordered(2)
      41    for (i=0; i < 100; ++i)
      42      for (j=0; j < 100; ++j)
      43        {
      44  #pragma omp ordered depend(sink:i-2,j-2,k+2) /* { dg-error "does not match number of iteration var" } */
      45  	bark();
      46        }
      47  
      48  #pragma omp parallel for ordered(2)
      49    for (i=0; i < 100; ++i)
      50      for (j=0; j < 100; ++j)
      51        {
      52  #pragma omp ordered depend(sink:i-2) /* { dg-error "does not match number of iteration variables" } */
      53  	bark();
      54        }
      55  
      56  #pragma omp parallel for ordered(2)
      57    for (i=0; i < 100; ++i)
      58      for (j=0; j < 100; ++j)
      59        {
      60  #pragma omp ordered depend(sink:k,i) /* { dg-error "is not an iteration" } */
      61  	bark();
      62        }
      63  }
      64  
      65  void bar (int, int, int);
      66  
      67  void
      68  foo (int n, int m, int o)
      69  {
      70    int i, j, k;
      71    #pragma omp for collapse(2) ordered(3)
      72    for (i = 0; i < m; i++)
      73      {
      74        for (j = 0; j < n; j++)
      75  	for (k = 0; k < o; k++)
      76  	  {
      77  #pragma omp ordered depend(sink: i-1,j,k) depend(sink: i,j-1,k-1) depend(sink: i-1,j-1,k+1)
      78  	    bar (i, j, k);
      79  #pragma omp ordered depend(source)
      80  	  }
      81      }
      82  }
      83  
      84  int
      85  baz ()
      86  {
      87    int i, j;
      88  #pragma omp parallel for ordered(2)
      89    for (i=0; i < 100; ++i)
      90      for (j=0; j < 100; ++j)
      91        {
      92  #pragma omp ordered depend(sink:i-1,j-3)
      93  	bar (i, j, 0);
      94  #pragma omp ordered depend(source)
      95        }
      96  
      97    return 0;
      98  }