blob: 8c770ecb80c1187cf1ede3c747e1b9c1cb5d7ab7 [file] [log] [blame]
Tobias Burnus2a10a2c2020-09-28 18:08:05 +02001/* { dg-additional-options "-O0 -fdump-tree-omplower" } */
2/* { dg-xfail-if "PR 97106/PR 97102 - .alias not (yet) supported for nvptx" { offload_target_nvptx } } */
3
4#include <cstdlib>
5#include <type_traits>
6
7template<int Dim> struct V {
8 int version_called;
9
10 template<bool B = (Dim == 0),
11 typename = typename std::enable_if<B>::type>
12 V ()
13 {
14 version_called = 1;
15 }
16
17 template<typename TArg0,
18 typename = typename std::enable_if<(std::is_same<unsigned long,
19 typename std::decay<TArg0>::type>::value)>::type>
20 V (TArg0)
21 {
22 version_called = 2;
23 }
24};
25
26template<int Dim> struct S {
27 V<Dim> v;
28};
29
30int
31main ()
32{
33 int version_set[2] = {-1, -1};
34
35#pragma omp target map(from: version_set[0:2])
36 {
37 S<0> s;
38 version_set[0] = s.v.version_called;
39 V<1> v2((unsigned long) 1);
40 version_set[1] = v2.version_called;
41 }
42
43 if (version_set[0] != 1 || version_set[1] != 2)
44 abort ();
45 return 0;
46}
47
48/* "3" for S<0>::S, V<0>::V<>, and V<1>::V<long unsigned int>: */
49/* { dg-final { scan-tree-dump-times "__attribute__..omp declare target" 3 "omplower" } } */