blob: 545f1a9fcbffa3c45bcaa5ed0da47b39114a94ef [file] [log] [blame]
/* { dg-do run } */
#define N 256
#pragma omp begin declare target indirect
int foo(void) { return 5; }
int bar(void) { return 8; }
int baz(void) { return 11; }
#pragma omp end declare target
int main (void)
{
int i, x = 0, expected = 0;
int (*fn_ptr[N])(void);
for (i = 0; i < N; i++)
{
switch (i % 3)
{
case 0: fn_ptr[i] = &foo; break;
case 1: fn_ptr[i] = &bar; break;
case 2: fn_ptr[i] = &baz; break;
}
expected += (*fn_ptr[i]) ();
}
#pragma omp target teams distribute parallel for \
reduction (+: x) map (to: fn_ptr) map (tofrom: x)
for (int i = 0; i < N; i++)
x += (*fn_ptr[i]) ();
return x - expected;
}