Hi! As mentioned in the PR and now that the middle-end bug is fixed, this fixes thinkos in the testcase; the result variable has to be omp declare target, otherwise the declared target functions called from the target regions can't access it.
The testcase still fails to assemble due to exceptions, but that is something to be fixed in the nvptx backend (sure, we could add -fno-exceptions temporarily though for nvptx offloading only). 2018-07-26 Jakub Jelinek <ja...@redhat.com> PR testsuite/86660 * testsuite/libgomp.c++/for-15.C (results): Include it in omp declare target region. (main): Use map (always, tofrom: results) instead of map (tofrom: results). --- libgomp/testsuite/libgomp.c++/for-15.C.jj 2018-07-11 15:09:05.997745784 +0200 +++ libgomp/testsuite/libgomp.c++/for-15.C 2018-07-25 12:30:59.490564748 +0200 @@ -88,11 +88,9 @@ private: template <typename T> const I<T> &J<T>::begin () { return b; } template <typename T> const I<T> &J<T>::end () { return e; } -#pragma omp end declare target int results[2000]; -#pragma omp declare target template <typename T> void baz (I<T> &i) @@ -186,37 +184,37 @@ main () a[i] = i; #pragma omp target data map (to: a) { - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[75], &a[1945]); f1 (j); } check (i >= 75 && i < 1945 && (i - 75) % 3 == 0); - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[63], &a[1949]); f2 (j); } check (i >= 63 && i < 1949); - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[58], &a[1979]); f3 <2> (j); } check (i >= 58 && i < 1979 && (i - 58) % 6 == 0); - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[59], &a[1981]); f4 <9> (j); } check (i >= 59 && i < 1981 && (i - 59) % 9 == 0); - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[52], &a[1972]); f5 (j); } check (i >= 52 && i < 1972 && (i - 52) % 4 == 0); - #pragma omp target teams map (tofrom: results) + #pragma omp target teams map (always, tofrom: results) { J<int> j (&a[31], &a[1827]); f6 (j); Jakub