/* { dg-additional-options "-fno-tree-switch-conversion" } */ #pragma omp declare target int foo (unsigned a) { switch (a) { case 1 ... 5: return 1; case 9 ... 11: return a + 3; case 12 ... 13: return a + 3; default: return 44; } } #pragma omp end declare target #define s 100 void __attribute__((noinline, noclone)) verify(int *a) { if (a[0] != 44) __builtin_abort (); for (int i = 1; i <= 5; i++) if (a[i] != 1) __builtin_abort (); for (int i = 6; i <= 8; i++) if (a[i] != 44) __builtin_abort (); for (int i = 9; i <= 13; i++) if (a[i] != i + 3) __builtin_abort (); for (int i = 14; i < s; i++) if (a[i] != 44) __builtin_abort (); } int main(int argc) { int array[s]; #pragma omp target { for (int i = 0; i < s; i++) { int v = foo (i); array[i] = v; } } verify (array); return 0; }