mirror of git://gcc.gnu.org/git/gcc.git
58 lines
1.0 KiB
C
58 lines
1.0 KiB
C
/* { dg-do run { target c++ } } */
|
|
|
|
#include <stdlib.h>
|
|
#include <assert.h>
|
|
|
|
struct Z {
|
|
int *arr;
|
|
};
|
|
|
|
void baz (struct Z *zarr, int len)
|
|
{
|
|
#pragma omp declare mapper (struct Z myvar) map(to: myvar.arr) \
|
|
map(tofrom: myvar.arr[0:len])
|
|
zarr[0].arr = (int *) calloc (len, sizeof (int));
|
|
zarr[5].arr = (int *) calloc (len, sizeof (int));
|
|
|
|
#pragma omp target map(zarr, *zarr)
|
|
{
|
|
for (int i = 0; i < len; i++)
|
|
zarr[0].arr[i]++;
|
|
}
|
|
|
|
#pragma omp target map(zarr, zarr[5])
|
|
{
|
|
for (int i = 0; i < len; i++)
|
|
zarr[5].arr[i]++;
|
|
}
|
|
|
|
#pragma omp target map(zarr[5])
|
|
{
|
|
for (int i = 0; i < len; i++)
|
|
zarr[5].arr[i]++;
|
|
}
|
|
|
|
#pragma omp target map(zarr, zarr[5:1])
|
|
{
|
|
for (int i = 0; i < len; i++)
|
|
zarr[5].arr[i]++;
|
|
}
|
|
|
|
for (int i = 0; i < len; i++)
|
|
assert (zarr[0].arr[i] == 1);
|
|
|
|
for (int i = 0; i < len; i++)
|
|
assert (zarr[5].arr[i] == 3);
|
|
|
|
free (zarr[5].arr);
|
|
free (zarr[0].arr);
|
|
}
|
|
|
|
int
|
|
main (int argc, char *argv[])
|
|
{
|
|
struct Z myzarr[10];
|
|
baz (myzarr, 256);
|
|
return 0;
|
|
}
|