1  int bar (int);
       2  int baz (int *);
       3  
       4  void
       5  f1 (int x)
       6  {
       7    int i = 0, j = 0, k = 0;
       8    long long l = 0;
       9    #pragma omp for collapse(2)
      10    for (i = 0; i < 16; i = i + 2)
      11      for (j = i * i; j < 16; j += 2)	/* { dg-error "initializer expression refers to iteration variable" } */
      12        ;
      13    #pragma omp for collapse(2)
      14    for (i = 0; i < 16; i = i + 2)
      15      for (j = i + 3; j < (i + 1) * 2; j += 2)	/* { dg-error "condition expression refers to iteration variable" } */
      16        ;
      17    #pragma omp for collapse(2)
      18    for (i = 0; i < 16; i = i + 2)
      19      for (j = (i + 1) * 2; j < i * 8; j += 2)	/* { dg-error "initializer expression refers to iteration variable" } */
      20        ;
      21    #pragma omp for collapse(3)
      22    for (i = 0; i < 16; i = i + 2)
      23      for (j = 0; j < 16; j++)
      24        for (k = i + j; k < 32; k++)	/* { dg-error "initializer expression refers to iteration variable" } */
      25  	;
      26    #pragma omp for collapse(2)
      27    for (l = 0; l < 16; l++)
      28      for (j = 0; j < l; j++)		/* { dg-error "outer iteration variable 'l' used in condition expression has type other than 'int'" } */
      29        ;
      30    #pragma omp for collapse(2)		/* { dg-error "outer iteration variable 'l' used in initializer expression has type other than 'int'" "" { target c } } */
      31    for (l = 0; l < 16; l++)		/* { dg-error "outer iteration variable 'l' used in initializer expression has type other than 'int'" "" { target c++ } } */
      32      for (j = 7LL * l; j < 32; j++)
      33        ;
      34    #pragma omp for collapse(2)
      35    for (i = 0; i < 16; i = i + 2)
      36      for (j = i + 3; j < i * 2 + 2; j += 2)
      37        ;
      38    #pragma omp for collapse(2)
      39    for (i = 0; i < 16; i = i + 2)
      40      for (j = i * 2 + 2; j < i * 6 + 2; j += 2)
      41        ;
      42    #pragma omp for collapse(3)
      43    for (i = 0; i < 16; i = i + 2)
      44      for (j = 0; j < 16; j++)
      45        for (k = 14 + 7 * i; k < 32 * j; k++)	/* { dg-error "two different outer iteration variables 'i' and 'j' used in a single loop" } */
      46  	;
      47    #pragma omp for schedule(static, 2) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
      48    for (i = 0; i < 16; i++)
      49      for (j = 1; j < i; j++)
      50        ;
      51    #pragma omp for schedule(static) collapse(2)		/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
      52    for (i = 0; i < 16; i++)
      53      for (j = 1; j < i; j++)
      54        ;
      55    #pragma omp for schedule(dynamic, 5) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
      56    for (i = 0; i < 16; i++)
      57      for (j = 1; j < i; j++)
      58        ;
      59    #pragma omp for ordered collapse(2)			/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
      60    for (i = 0; i < 16; i++)
      61      for (j = 1; j < i; j++)
      62        ;
      63    #pragma omp for ordered collapse(2)			/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
      64    for (i = 0; i < 16; i++)
      65      for (j = 1; j < i; j++)
      66        ;
      67    #pragma omp for ordered (3) collapse (2)		/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
      68    for (i = 0; i < 64; i++)
      69      for (j = 0; j < i; j++)
      70        for (k = 0; k < 64; k++)
      71          {
      72            #pragma omp ordered depend (sink: i - 1, j - 2, k - 3)
      73            #pragma omp ordered depend (source)
      74          }
      75    #pragma omp for ordered (3) collapse (2)		/* { dg-error "'ordered' clause may not appear on non-rectangular 'for'" } */
      76    for (i = 0; i < 64; i++)
      77      for (j = 0; j < 64; j++)
      78        for (k = i; k < 64; k++)
      79          {
      80            #pragma omp ordered depend (sink: i - 1, j - 2, k - 3)
      81            #pragma omp ordered depend (source)
      82          }
      83    #pragma omp for simd schedule(simd: static) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
      84    for (i = 0; i < 16; i++)
      85      for (j = 1; j < i; j++)
      86        ;
      87  }
      88  
      89  void
      90  f2 (void)
      91  {
      92    int i = 0, j = 0;
      93    #pragma omp distribute dist_schedule(static, 4) collapse(2)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
      94    for (i = 0; i < 64; i++)
      95      for (j = i; j < 64; j++)
      96        ;
      97    #pragma omp distribute collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
      98    for (i = 0; i < 64; i++)
      99      for (j = i; j < 64; j++)
     100        ;
     101    #pragma omp distribute parallel for simd schedule(simd: static) collapse(2)	/* { dg-error "'schedule' clause may not appear on non-rectangular 'for'" } */
     102    for (i = 0; i < 16; i++)
     103      for (j = 1; j < i; j++)
     104        ;
     105    #pragma omp distribute parallel for simd collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
     106    for (i = 0; i < 64; i++)
     107      for (j = i; j < 64; j++)
     108        ;
     109    #pragma omp distribute simd collapse(2) dist_schedule(static)	/* { dg-error "'dist_schedule' clause may not appear on non-rectangular 'distribute'" } */
     110    for (i = 0; i < 64; i++)
     111      for (j = i; j < 64; j++)
     112        ;
     113  }
     114  
     115  void
     116  f3 (void)
     117  {
     118    int i = 0, j = 0;
     119    #pragma omp taskloop collapse(2) grainsize(4)	/* { dg-error "'grainsize' clause may not appear on non-rectangular 'taskloop'" } */
     120    for (i = 0; i < 64; i++)
     121      for (j = i; j < 64; j++)
     122        ;
     123    #pragma omp taskloop collapse(2) num_tasks(4)	/* { dg-error "'num_tasks' clause may not appear on non-rectangular 'taskloop'" } */
     124    for (i = 0; i < 64; i++)
     125      for (j = i; j < 64; j++)
     126        ;
     127  }