1 /* { dg-do compile } */
2 /* { dg-options "-fopenmp" } */
3 
4 void
foo(void)5 foo (void)
6 {
7   int i;
8   #pragma omp for ordered
9   for (i = 0; i < 64; i++)
10     {
11       #pragma omp ordered
12       ;
13     }
14   #pragma omp for ordered
15   for (i = 0; i < 64; i++)
16     {
17       #pragma omp ordered threads
18       ;
19     }
20   #pragma omp for ordered
21   for (i = 0; i < 64; i++)
22     {
23       #pragma omp ordered threads threads	/* { dg-error "too many .threads. clauses" } */
24       ;
25     }
26   #pragma omp simd
27   for (i = 0; i < 64; i++)
28     {
29       #pragma omp ordered simd
30       ;
31     }
32   #pragma omp simd
33   for (i = 0; i < 64; i++)
34     {
35       #pragma omp ordered simd simd		/* { dg-error "too many .simd. clauses" } */
36       ;
37     }
38   #pragma omp for simd ordered
39   for (i = 0; i < 64; i++)
40     {
41       #pragma omp ordered threads, simd
42       ;
43     }
44   #pragma omp for simd ordered
45   for (i = 0; i < 64; i++)
46     {
47       #pragma omp ordered threads, simd, threads, simd	/* { dg-error "too many .threads. clauses" } */
48       ;	/* { dg-error "too many .simd. clauses" "" { target *-*-* } .-1 } */
49     }
50   #pragma omp for simd ordered(1)	/* { dg-error ".ordered. clause with parameter may not be specified on .#pragma omp for simd. construct" } */
51   for (i = 0; i < 64; i++)
52     {
53       #pragma omp ordered depend(sink: i - 1)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
54       #pragma omp ordered depend(source)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
55     }
56   #pragma omp parallel for simd ordered(1)	/* { dg-error ".ordered. clause with parameter may not be specified on .#pragma omp parallel for simd. construct" } */
57   for (i = 0; i < 64; i++)
58     {
59       #pragma omp ordered depend(sink: i - 1)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
60       #pragma omp ordered depend(source)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
61     }
62   #pragma omp parallel for ordered
63   for (i = 0; i < 64; i++)
64     {
65       #pragma omp ordered depend(sink: i - 1)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
66       #pragma omp ordered depend(source)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
67     }
68   #pragma omp parallel for
69   for (i = 0; i < 64; i++)
70     {
71       #pragma omp ordered depend(sink: i - 1)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
72       #pragma omp ordered depend(source)	/* { dg-error "clause must be closely nested inside a loop with .ordered. clause with a parameter" } */
73     }
74 }
75 
76 void
bar(int x)77 bar (int x)
78 {
79   switch (x)
80     {
81     case 0:
82       #pragma omp ordered
83       ;
84       break;
85     case 1:
86       #pragma omp ordered threads
87       ;
88       break;
89     case 2:
90       #pragma omp ordered threads, threads	/* { dg-error "too many .threads. clauses" } */
91       ;
92       break;
93     }
94 }
95 
96 void
baz(void)97 baz (void)
98 {
99   #pragma omp ordered simd
100   ;
101   #pragma omp ordered simd, simd		/* { dg-error "too many .simd. clauses" } */
102   ;
103 }
104