/* { dg-do compile } */ /* Check that __extension__ introduces intervening code. */ extern void do_something (void); void imperfect1 (int x, int y) { #pragma omp for collapse (2) for (int i = 0; i < x; i++) /* { dg-error "not enough nested loops" } */ { __extension__ ({ for (int j = 0; j < y; j++) /* { dg-error "loop not permitted in intervening code" } */ do_something (); }); } } void perfect1 (int x, int y) { #pragma omp for ordered (2) for (int i = 0; i < x; i++) /* { dg-error "not enough nested loops" } */ /* { dg-error "inner loops must be perfectly nested" "" { target *-*-*} .-1 } */ { __extension__ ({ for (int j = 0; j < y; j++) /* { dg-error "loop not permitted in intervening code" } */ do_something (); }); } } /* Check that we don't barf on __extension__ in the inner loop body. */ void imperfect2 (int x, int y) { #pragma omp for collapse (2) for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) { __extension__ ({ do_something (); }); } } void perfect2 (int x, int y) { #pragma omp for ordered (2) for (int i = 0; i < x; i++) for (int j = 0; j < y; j++) { __extension__ ({ do_something (); }); } }