blob: eba1d028d980ba357a85085d3b6d9c5ec903738c [file] [log] [blame]
/* Exercise invalid reductions on array and struct members. */
void
test_parallel ()
{
struct {
int a;
float b[5];
} s1, s2[10];
int i;
double z[100];
#pragma acc parallel reduction(+:s1.a) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.a += 1;
#pragma acc parallel reduction(+:s1.b[3]) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.b[3] += 1;
#pragma acc parallel reduction(+:s2[2].a) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[2].a += 1;
#pragma acc parallel reduction(+:s2[3].b[4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[3].b[4] += 1;
#pragma acc parallel reduction(+:z[5]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
z[5] += 1;
}
void
test_combined ()
{
struct {
int a;
float b[5];
} s1, s2[10];
int i;
double z[100];
#pragma acc parallel loop reduction(+:s1.a) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.a += 1;
#pragma acc parallel loop reduction(+:s1.b[3]) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.b[3] += 1;
#pragma acc parallel loop reduction(+:s2[2].a) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[2].a += 1;
#pragma acc parallel loop reduction(+:s2[3].b[4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[3].b[4] += 1;
#pragma acc parallel loop reduction(+:z[5]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
z[5] += 1;
}
void
test_loops ()
{
struct {
int a;
float b[5];
} s1, s2[10];
int i;
double z[100];
#pragma acc parallel
{
#pragma acc loop reduction(+:s1.a) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.a += 1;
#pragma acc loop reduction(+:s1.b[3]) /* { dg-error "expected '\\\)' before '\\\.' token" } */
for (i = 0; i < 10; i++)
s1.b[3] += 1;
#pragma acc loop reduction(+:s2[2].a) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[2].a += 1;
#pragma acc loop reduction(+:s2[3].b[4]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
s2[3].b[4] += 1;
#pragma acc loop reduction(+:z[5]) /* { dg-error "expected '\\\)' before '\\\[' token" } */
for (i = 0; i < 10; i++)
z[5] += 1;
}
}
int
main ()
{
test_parallel ();
test_combined ();
test_loops ();
return 0;
}