(root)/
gcc-13.2.0/
libgomp/
testsuite/
libgomp.c-c++-common/
reverse-offload-2.c
       1  /* { dg-do run }  */
       2  /* { dg-additional-options "-foffload-options=nvptx-none=-misa=sm_35" { target { offload_target_nvptx } } } */
       3  
       4  #pragma omp requires reverse_offload
       5  
       6  int
       7  main ()
       8  {
       9    int A[10];
      10    int y;
      11  
      12    for (int i = 0; i < 10; i++)
      13      A[i] = 2*i;
      14  
      15    y = 42;
      16  
      17    /* Pointlessly copy to the default device.  */
      18    #pragma omp target data map(to: A)
      19    {
      20      /* Not enclosed in a target region (= i.e. running on the host); the
      21         following is valid - it runs on the current device (= host).  */
      22      #pragma omp target device ( ancestor:1 ) firstprivate(y) map(to: A)
      23      {
      24        if (y != 42)
      25  	__builtin_abort ();
      26        for (int i = 0; i < 10; i++)
      27  	if (A[i] != 2*i)
      28  	  __builtin_abort ();
      29        for (int i = 0; i < 10; i++)
      30  	if (A[i] != 2*i)
      31  	  A[i] = 4*i;
      32        y = 31;
      33      }
      34  
      35      if (y != 42)
      36        __builtin_abort ();
      37      for (int i = 0; i < 10; i++)
      38        if (A[i] != 2*i)
      39  	__builtin_abort ();
      40    }
      41  
      42    if (y != 42)
      43      __builtin_abort ();
      44    for (int i = 0; i < 10; i++)
      45      if (A[i] != 2*i)
      46        __builtin_abort ();
      47  
      48    return 0;
      49  }