blob: 5c24aae07ccaa72ed9ed691b7bd7df827152d923 [file] [log] [blame]
/* { 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);
}
}
}