1 // PR c++/63248
2 // { dg-do run }
3 
4 int *v;
5 
6 template <typename T>
7 T
foo(T A,T B)8 foo (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 
24 template <int N>
25 int
bar(int A,int B)26 bar (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 
40 int
baz(int A,int B)41 baz (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 
55 int
main()56 main ()
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