1/* { dg-do compile } */
2/* { dg-options "-std=c99 -fopenmp" } */
3
4extern void baz (int);
5
6void foo (int j, int k)
7{
8  int i;
9
10  /* Valid loops.  */
11  #pragma omp for
12  for (i = 0; i < 10; i++)
13    baz (i);
14
15  #pragma omp for
16  for (i = j; i <= 10; i+=4)
17    baz (i);
18
19  #pragma omp for
20  for (i = j; i > 0; i = i - 1)
21    baz (j);
22
23  #pragma omp for
24  for (i = j; i >= k; i--)
25    baz (i);
26
27  #pragma omp for
28  for (int l = j; l < 10; l++)
29    baz (l);
30
31  /* Malformed parallel loops.  */
32  #pragma omp for
33  i = 0;		/* { dg-error "for statement expected" } */
34  for ( ; i < 10; )
35    {
36      baz (i);
37      i++;
38    }
39
40  #pragma omp for
41  for (i = 0; ; i--)	/* { dg-error "missing controlling predicate" } */
42    {
43      if (i >= 10)
44	break;		/* { dg-error "break" } */
45      baz (i);
46    }
47
48  #pragma omp for
49  for (i = 0;
50       i < 10 && j > 4; /* { dg-error "invalid controlling predicate" } */
51       i-=3)
52    baz (i);
53
54  #pragma omp for
55  for (i = 0;
56       i < 10;
57       i-=3, j+=2)	/* { dg-error "invalid increment expression" } */
58    baz (i);
59
60  int m = 0;
61  #pragma omp for
62  for (; m < 10; m++)	/* { dg-error "expected" } */
63    baz (m);
64
65  m = 0;
66  #pragma omp for
67  for (int n = 0; m < 10; m++)	/* { dg-error "invalid controlling predicate|invalid increment expression" } */
68    baz (m);
69
70  #pragma omp for
71  for (m = 0; m < 10; i++)	/* { dg-error "invalid increment expression" } */
72    baz (m);
73}
74