/* { dg-do run } */ #include #include 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; }