1  /* { dg-do run } */
       2  /* { dg-require-effective-target offload_device_nonshared_as } */
       3  
       4  #include <omp.h>
       5  #include <stdlib.h>
       6  
       7  int main ()
       8  {
       9    int a = 100;
      10    int b = 0;
      11    int c, d;
      12  
      13    #pragma omp target if(a > 200 && a < 400) map(from: c)
      14      c = omp_is_initial_device ();
      15  
      16    #pragma omp target data map(to: b) if(a > 200 && a < 400)
      17      #pragma omp target map(from: b, d)
      18        {
      19  	b = 100;
      20  	d = omp_is_initial_device ();
      21        }
      22  
      23    if (b != 100 || !c || d)
      24      abort ();
      25  
      26    a += 200;
      27    b = 0;
      28  
      29    #pragma omp target if(a > 200 && a < 400) map(from: c)
      30      c = omp_is_initial_device ();
      31  
      32    #pragma omp target data map(to: b) if(a > 200 && a < 400)
      33      #pragma omp target map(from: b, d)
      34        {
      35  	b = 100;
      36  	d = omp_is_initial_device ();
      37        }
      38  
      39    if (b != 0 || c || d)
      40      abort ();
      41  
      42    a += 200;
      43    b = 0;
      44  
      45    #pragma omp target if(a > 200 && a < 400) map(from: c)
      46      c = omp_is_initial_device ();
      47  
      48    #pragma omp target data map(to: b) if(a > 200 && a < 400)
      49      #pragma omp target map(from: b, d)
      50        {
      51  	b = 100;
      52  	d = omp_is_initial_device ();
      53        }
      54  
      55    if (b != 100 || !c || d)
      56      abort ();
      57  
      58    return 0;
      59  }