Tobias Burnus | 2a10a2c | 2020-09-28 18:08:05 +0200 | [diff] [blame] | 1 | /* { 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 | |
| 7 | template<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 | |
| 26 | template<int Dim> struct S { |
| 27 | V<Dim> v; |
| 28 | }; |
| 29 | |
| 30 | int |
| 31 | main () |
| 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" } } */ |