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());
  }
}

Reply via email to