|  | /* { 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); | 
|  | } | 
|  | } | 
|  | } |