blob: 897eed275ecb462a1551bc51d6c183de49fcdea4 [file] [log] [blame]
/* { dg-do compile } */
/* This file contains tests that are expected to fail. */
/* These jumps are all OK since they are to/from the same structured block. */
void f1a (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
goto a; a:;
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}
/* Jump around loop body to/from different structured blocks of intervening
code. */
void f2a (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
goto a; a:;
if (i > 16) goto b; /* { dg-error "invalid branch to/from OpenMP structured block" } */
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}
/* Jump into loop body from intervening code. */
void f3a (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
goto a; a:;
if (i > 16) goto c; /* { dg-error "invalid branch to/from OpenMP structured block" } */
for (int j = 0; j < 64; ++j)
{
c:
;
}
goto b; b:;
}
}
/* Jump out of loop body to intervening code. */
void f4a (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
goto a; a:;
for (int j = 0; j < 64; ++j)
if (i > 16) goto c; /* { dg-error "invalid branch to/from OpenMP structured block" } */
c:
;
goto b; b:;
}
}
/* The next group of tests use the GNU extension for local labels. Expected
behavior is the same as the above group. */
/* These jumps are all OK since they are to/from the same structured block. */
void f1b (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
__label__ a, b, c;
goto a; a:;
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}
/* Jump around loop body to/from different structured blocks of intervening
code. */
void f2b (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
__label__ a, b, c;
goto a; a:;
if (i > 16) goto b; /* { dg-error "invalid branch to/from OpenMP structured block" } */
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}
/* Jump into loop body from intervening code. */
void f3b (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
__label__ a, b, c;
goto a; a:;
if (i > 16) goto c; /* { dg-error "invalid branch to/from OpenMP structured block" } */
for (int j = 0; j < 64; ++j)
{
c:
;
}
goto b; b:;
}
}
/* Jump out of loop body to intervening code. */
void f4b (void)
{
#pragma omp for collapse(2)
for (int i = 0; i < 64; ++i)
{
__label__ a, b, c;
goto a; a:;
for (int j = 0; j < 64; ++j)
if (i > 16) goto c; /* { dg-error "invalid branch to/from OpenMP structured block" } */
c:
;
goto b; b:;
}
}
/* Test that the even the valid jumps are rejected when intervening code
is not allowed at all. */
void f1c (void)
{
#pragma omp for ordered(2)
for (int i = 0; i < 64; ++i) /* { dg-error "inner loops must be perfectly nested" } */
{
goto a; a:;
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}
void f1d (void)
{
#pragma omp for ordered(2)
for (int i = 0; i < 64; ++i) /* { dg-error "inner loops must be perfectly nested" } */
{
__label__ a, b, c;
goto a; a:;
for (int j = 0; j < 64; ++j)
{
goto c; c:;
}
goto b; b:;
}
}