blob: e7564cc12b27d576b5382fb31bdc3f13f7cd8c02 [file] [log] [blame]
/* { dg-do run } */
#include <stdlib.h>
#include <openacc.h>
int i;
int
is_mapped (void *p, size_t n)
{
#if ACC_MEM_SHARED
return 1;
#else
return acc_is_present (p, n);
#endif
}
int main(void)
{
int j;
i = -1;
j = -2;
#pragma acc data copyin (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
if (i != 2 || j != 1)
abort ();
i = -1;
j = -2;
#pragma acc data copyout (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
#pragma acc parallel present (i, j)
{
i = 4;
j = 2;
}
}
if (i != 4 || j != 2)
abort ();
i = -1;
j = -2;
#pragma acc data create (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
if (i != 2 || j != 1)
abort ();
i = -1;
j = -2;
#pragma acc data present_or_copyin (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
if (i != 2 || j != 1)
abort ();
i = -1;
j = -2;
#pragma acc data present_or_copyout (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
#pragma acc parallel present (i, j)
{
i = 4;
j = 2;
}
}
if (i != 4 || j != 2)
abort ();
i = -1;
j = -2;
#pragma acc data present_or_copy (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
#if ACC_MEM_SHARED
if (i != 2 || j != 1)
abort ();
#else
if (i != -1 || j != -2)
abort ();
#endif
i = -1;
j = -2;
#pragma acc data present_or_create (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
if (i != 2 || j != 1)
abort ();
i = -1;
j = -2;
#pragma acc data copyin (i, j)
{
#pragma acc data present (i, j)
{
if (!is_mapped (&i, sizeof (i)) || !is_mapped (&j, sizeof (j)))
abort ();
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
}
if (i != 2 || j != 1)
abort ();
i = -1;
j = -2;
#pragma acc data
{
#if !ACC_MEM_SHARED
if (is_mapped (&i, sizeof (i)) || is_mapped (&j, sizeof (j)))
abort ();
#endif
if (i != -1 || j != -2)
abort ();
i = 2;
j = 1;
if (i != 2 || j != 1)
abort ();
}
if (i != 2 || j != 1)
abort ();
return 0;
}