blob: 8d4aff21cd793a010eabeeba8e8fc533459e840f [file] [log] [blame]
// { dg-do run }
#include <cassert>
#pragma omp declare target
struct item {
item(item *p, int v) : prev(p), val(v) { }
int get() { return prev ? prev->get() * val : val; }
item *prev;
int val;
};
/* This case demonstrates why constructing on the host and then copying to
the target would be less desirable. With on-target construction, "prev"
for each 'item' will be a device pointer, not a host pointer. */
item hubert1(nullptr, 3);
item hubert2(&hubert1, 5);
item hubert3(&hubert2, 7);
item hubert4(&hubert3, 11);
#pragma omp end declare target
int main()
{
int res = -1;
#pragma omp target map(from:res)
{
res = hubert4.get ();
}
assert (res == 1155);
return 0;
}