// PR c++/63248 // { dg-do run } int *v; template T foo (T A, T B) { T a = 2; T b = 4; #pragma omp target map(v[a:b]) v[a] = 1; #pragma omp target map(v[A:B]) v[a] = 2; #pragma omp target map(A) A = 19; return A; } template int bar (int A, int B) { #pragma omp target map(A) A = 8; if (A != 8) __builtin_abort (); #pragma omp target map(A, B) { A = 1; B = 2; } return A + B; } int baz (int A, int B) { #pragma omp target map(A) A = 8; if (A != 8) __builtin_abort (); #pragma omp target map(A, B) { A = 1; B = 2; } return A + B; } int main () { int a[10] = { 0 }; v = a; if (foo (1, 5) != 19 || v[2] != 2 || bar<0> (5, 7) != 3 || baz (5, 7) != 3) __builtin_abort (); }