1// PR c++/63248 2// { dg-do run } 3 4int *v; 5 6template <typename T> 7T 8foo (T A, T B) 9{ 10 T a = 2; 11 T b = 4; 12 13#pragma omp target map(v[a:b]) 14 v[a] = 1; 15 16#pragma omp target map(v[A:B]) 17 v[a] = 2; 18 19#pragma omp target map(A) 20 A = 19; 21 return A; 22} 23 24template <int N> 25int 26bar (int A, int B) 27{ 28#pragma omp target map(A) 29 A = 8; 30 if (A != 8) 31 __builtin_abort (); 32#pragma omp target map(A, B) 33 { 34 A = 1; 35 B = 2; 36 } 37 return A + B; 38} 39 40int 41baz (int A, int B) 42{ 43#pragma omp target map(A) 44 A = 8; 45 if (A != 8) 46 __builtin_abort (); 47#pragma omp target map(A, B) 48 { 49 A = 1; 50 B = 2; 51 } 52 return A + B; 53} 54 55int 56main () 57{ 58 int a[10] = { 0 }; 59 v = a; 60 if (foo (1, 5) != 19 || v[2] != 2 || bar<0> (5, 7) != 3 || baz (5, 7) != 3) 61 __builtin_abort (); 62} 63