/* { dg-do compile } */ /* Check that various cases of invalid references to variables bound in an intervening code scope are diagnosed and do not ICE. This test is expected to produce errors. */ extern void foo (int, int); void f1 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int v = (i + 4) * 2; for (int j = v; j < 64; j++) /* { dg-error "initializer is bound in intervening code" } */ foo (i, j); } } void f2 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int v = (i + 4) * 2; for (int j = 0; j < v; j++) /* { dg-error "end test is bound in intervening code" } */ foo (i, j); } } void f3 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int v = (i + 4) * 2; for (int j = 0; j < 64; j = j + v) /* { dg-error "increment expression is bound in intervening code" } */ foo (i, j); } } void f4 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int v = 8; for (int j = v; j < 64; j++) /* { dg-error "initializer is bound in intervening code" } */ foo (i, j); } } void f5 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int j; for (j = 0; j < 64; j++) /* { dg-error "loop variable is bound in intervening code" } */ foo (i, j); } } void f6 (void) { #pragma omp for collapse (2) for (int i = 0; i < 64; i++) { int j; { int v = 8; for (j = v; j < 64; j++) /* { dg-error "loop variable is bound in intervening code" } */ /* { dg-error "initializer is bound in intervening code" "" { target *-*-* } .-1 } */ foo (i, j); } } }