1 /* { dg-do compile } */
3 /* Check that non-statement pragmas are accepted in a canonical loop nest
4 even when perfect nesting is required. */
6 extern void do_something (void);
8 void imperfect1 (int x
, int y
)
10 #pragma omp for collapse (2)
11 for (int i
= 0; i
< x
; i
++)
13 #pragma GCC diagnostic push
14 for (int j
= 0; j
< y
; j
++)
16 #pragma GCC diagnostic pop
20 void perfect1 (int x
, int y
)
22 #pragma omp for ordered (2)
23 for (int i
= 0; i
< x
; i
++)
25 #pragma GCC diagnostic push
26 for (int j
= 0; j
< y
; j
++)
28 #pragma GCC diagnostic pop
33 /* "GCC unroll" is a statement pragma that consumes the following loop as
34 a substatement. Thus, the inner loop should be treated as intervening
35 code rather than part of the loop nest. */
37 void imperfect2 (int x
, int y
)
39 #pragma omp for collapse (2)
40 for (int i
= 0; i
< x
; i
++) /* { dg-error "not enough nested loops" } */
43 for (int j
= 0; j
< y
; j
++) /* { dg-error "loop not permitted in intervening code" } */
48 void perfect2 (int x
, int y
)
50 #pragma omp for ordered (2)
51 for (int i
= 0; i
< x
; i
++) /* { dg-error "not enough nested loops" } */
52 /* { dg-error "inner loops must be perfectly nested" "" { target *-*-*} .-1 } */
55 for (int j
= 0; j
< y
; j
++) /* { dg-error "loop not permitted in intervening code" } */
61 /* Check that statement pragmas are accepted in the innermost loop body. */
63 void imperfect3 (int x
, int y
)
65 #pragma omp for collapse (2)
66 for (int i
= 0; i
< x
; i
++)
67 for (int j
= 0; j
< y
; j
++)
70 for (int k
= 0; k
< 4; k
++)
75 void perfect3 (int x
, int y
)
77 #pragma omp for ordered (2)
78 for (int i
= 0; i
< x
; i
++)
79 for (int j
= 0; j
< y
; j
++)
82 for (int k
= 0; k
< 4; k
++)