blob: a770979c6bf71662d19a3dc59505ad20a9f9968b [file]
#include <assert.h>
#ifdef USE_SELF_MAPS
#pragma omp self_maps
#endif
int var[2] = { 5, 6 };
#pragma omp declare target local(var)
int
get_var_inc (void)
{
var[0]++;
return var[0];
}
__UINTPTR_TYPE__
get_addr (void)
{
return (__UINTPTR_TYPE__) &var[0];
}
int main (void)
{
__UINTPTR_TYPE__ addr_tgt, addr_fn;
bool is_initial_dev;
int val;
var[0] = 7;
#pragma omp target map(from: val, is_initial_dev, addr_tgt, addr_fn)
{
is_initial_dev = __builtin_omp_is_initial_device ();
addr_tgt = (__UINTPTR_TYPE__) &var[0];
addr_fn = get_addr ();
var[0] += 5;
val = get_var_inc ();
}
if (is_initial_dev)
{
assert (val == var[0]);
assert (val == 13);
assert (&var[0] == (void*) addr_fn);
}
else
{
assert (val == 11);
assert (var[0] == 7);
assert (&var[0] != (void*) addr_fn);
}
assert (addr_tgt == addr_fn);
return 0;
}