/* { dg-do compile } */ /* Check that compound statements in intervening code are correctly handled. */ extern void do_something (void); void imperfect1 (int x, int y) { #pragma omp for collapse (2) for (int i = 0; i < x; i++) { {} for (int j = 0; j < y; j++) do_something (); } } void perfect1 (int x, int y) { #pragma omp for ordered (2) for (int i = 0; i < x; i++) /* { dg-error "inner loops must be perfectly nested" } */ { {} for (int j = 0; j < y; j++) do_something (); } } 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++) do_something (); {} } } void perfect2 (int x, int y) { #pragma omp for ordered (2) for (int i = 0; i < x; i++) /* { dg-error "inner loops must be perfectly nested" } */ { for (int j = 0; j < y; j++) do_something (); {} } } void imperfect3 (int x, int y) { #pragma omp for collapse (2) for (int i = 0; i < x; i++) { { do_something (); } for (int j = 0; j < y; j++) do_something (); { do_something (); } } } void perfect3 (int x, int y) { #pragma omp for ordered (2) for (int i = 0; i < x; i++) /* { dg-error "inner loops must be perfectly nested" } */ { { do_something (); } for (int j = 0; j < y; j++) do_something (); { do_something (); } } }