1 /* { dg-do compile } */
3 /* Check that a nested FOR loop with a label on it is treated as
4 intervening code, since it doesn't match the grammar for canonical
7 extern void do_something (void);
9 void imperfect1 (int x
, int y
)
11 #pragma omp for collapse (2)
12 for (int i
= 0; i
< x
; i
++) /* { dg-error "not enough nested loops" } */
15 for (int j
= 0; j
< y
; j
++) /* { dg-error "loop not permitted in intervening code" } */
20 void perfect1 (int x
, int y
)
22 #pragma omp for ordered (2)
23 for (int i
= 0; i
< x
; i
++) /* { dg-error "not enough nested loops" } */
24 /* { dg-error "inner loops must be perfectly nested" "" { target *-*-*} .-1 } */
27 for (int j
= 0; j
< y
; j
++) /* { dg-error "loop not permitted in intervening code" } */
33 /* Similar, but put the label on a block wrapping the nested loop instead. */
35 void imperfect2 (int x
, int y
)
37 #pragma omp for collapse (2)
38 for (int i
= 0; i
< x
; i
++) /* { dg-error "not enough nested loops" } */
42 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 } */
56 for (int j
= 0; j
< y
; j
++) /* { dg-error "loop not permitted in intervening code" } */
62 /* Sanity check that labels are allowed in the innermost loop body. */
64 void imperfect3 (int x
, int y
)
66 #pragma omp for collapse (2)
67 for (int i
= 0; i
< x
; i
++)
68 for (int j
= 0; j
< y
; j
++)
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
++)