1  int *qux (int *);
       2  
       3  void
       4  foo (void)
       5  {
       6    int a[1024];
       7    int *p;
       8    short *q;
       9    __PTRDIFF_TYPE__ r;
      10    #pragma omp parallel for collapse(2)
      11    for (p = &a[0]; p < &a[512]; p++)
      12      for (q = (short *) p + 64; q < (short *) p + 128; q++)	/* { dg-error "outer iteration variable 'p' used in initializer expression has type other than 'short int ?\\\*'" } */
      13        ;
      14    #pragma omp parallel for collapse(2)
      15    for (p = &a[0]; p < &a[512]; p++)
      16      for (r = &a[32] - p; r < 32; r++)				/* { dg-error "initializer expression refers to iteration variable 'p'" } */
      17        ;
      18    #pragma omp parallel for collapse(2)
      19    for (r = 0; r < 64; r++)
      20      for (p = &a[0] + r; p < &a[32] + 3 * r; p++)		/* { dg-error "initializer expression refers to iteration variable 'r'" } */
      21        ;
      22  }
      23  
      24  void
      25  bar (void)
      26  {
      27    int a[1024];
      28    int *p, *q, *r;
      29    #pragma omp parallel for collapse(2)
      30    for (p = &a[0]; p < &a[512]; p++)
      31      for (q = p + (&a[16] - qux (p)); q < &a[32]; q++)		/* { dg-error "initializer expression refers to iteration variable 'p'" } */
      32        ;
      33    #pragma omp parallel for collapse(3)
      34    for (p = &a[0]; p < &a[512]; p++)
      35      for (q = &a[0]; q < &a[512]; q++)
      36        for (r = p; r < q + 32; r++)				/* { dg-error "two different outer iteration variables 'p' and 'q' used in a single loop" } */
      37  	;
      38  }