https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113905
--- Comment #1 from Tobias Burnus <burnus at gcc dot gnu.org> ---
Ups, testcase was lost. Re-written from scratch:
-------------------
int var1() { return 1; }
int var2() { return 2; }
#pragma omp declare variant (var1) match(construct={target})
#pragma omp declare variant (var2) match(construct={parallel})
int foo() { return 42; }
#pragma omp declare variant (var2) match(construct={parallel})
#pragma omp declare variant (var2) match(construct={target})
int bar() { return 99; }
int main() {
__builtin_printf("foo: %d (expected: 42)\n", foo());
__builtin_printf("bar: %d (expected: 99)\n", bar());
#pragma omp parallel if(0)
{
__builtin_printf("foo<parallel>: %d (expected: 2)\n", foo());
__builtin_printf("bar<parallel>: %d (expected: 1)\n", bar());
}
#pragma omp target //device(-1 /*omp_initial_device*/)
{
__builtin_printf("foo<target>: %d (expected: 1)\n", foo());
__builtin_printf("bar<target>: %d (expected: 2)\n", bar());
}
}