1  /* PR middle-end/87649 */
       2  
       3  void
       4  foo (void)
       5  {
       6    int i;
       7    #pragma omp for ordered(1)
       8    for (i = 0; i < 64; i++)
       9      {
      10        #pragma omp ordered
      11        ;
      12      }
      13    #pragma omp for ordered(1)
      14    for (i = 0; i < 64; i++)
      15      {
      16        #pragma omp ordered threads
      17        ;
      18      }
      19  }
      20  
      21  void
      22  bar (void)
      23  {
      24    int i;
      25    #pragma omp for ordered
      26    for (i = 0; i < 64; i++)
      27      {
      28        #pragma omp ordered depend(source)
      29        #pragma omp ordered depend(sink: i - 1)
      30      }
      31    #pragma omp for ordered
      32    for (i = 0; i < 64; i++)
      33      {
      34        #pragma omp ordered doacross(source:)
      35        #pragma omp ordered doacross(sink: i - 1)
      36      }
      37    #pragma omp for
      38    for (i = 0; i < 64; i++)
      39      {
      40        #pragma omp ordered depend(source)	/* { dg-error "'ordered' construct with 'depend' clause must be closely nested inside a loop with 'ordered' clause" } */
      41        #pragma omp ordered depend(sink: i - 1)	/* { dg-error "'ordered' construct with 'depend' clause must be closely nested inside a loop with 'ordered' clause" } */
      42      }
      43    #pragma omp for
      44    for (i = 0; i < 64; i++)
      45      {
      46        #pragma omp ordered			/* { dg-error "'ordered' region must be closely nested inside a loop region with an 'ordered' clause" } */
      47        ;
      48      }
      49    #pragma omp for
      50    for (i = 0; i < 64; i++)
      51      {
      52        #pragma omp ordered threads		/* { dg-error "'ordered' region must be closely nested inside a loop region with an 'ordered' clause" } */
      53        ;
      54      }
      55  }