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