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