blob: 643cfdb6e28be1b3b87b5c91b27d9f59e93e7904 [file] [log] [blame]
#include <cstring>
#include <cassert>
static int lo()
{
return 30;
}
static int len()
{
return 10;
}
template<typename T>
void foo ()
{
T arr[100];
T *ptr;
memset (arr, '\0', sizeof arr);
#pragma omp target enter data map(to: arr[0:100])
for (int i = 0; i < 100; i++)
arr[i] = i;
ptr = &arr[10];
#pragma omp target update to(*ptr)
for (int i = lo (); i < lo () + len (); i++)
arr[i] = i * 2;
#pragma omp target update to(arr[lo():len()])
#pragma omp target exit data map(from: arr[0:100])
assert (arr[10] == 10);
for (int i = lo (); i < lo () + len (); i++)
assert (arr[i] == i * 2);
}
int
main ()
{
char arr[100];
char *ptr;
memset (arr, '\0', sizeof arr);
#pragma omp target enter data map(to: arr[0:100])
for (int i = 0; i < 100; i++)
arr[i] = i;
ptr = &arr[10];
#pragma omp target update to(*ptr)
for (int i = lo (); i < lo () + len (); i++)
arr[i] = i * 2;
#pragma omp target update to(arr[lo():len()])
#pragma omp target exit data map(from: arr[0:100])
assert (arr[10] == 10);
for (int i = lo (); i < lo () + len (); i++)
assert (arr[i] == i * 2);
foo<short> ();
return 0;
}