1  /* PR middle-end/64734 */
       2  
       3  #include <stdlib.h>
       4  
       5  void
       6  foo (int *x, int *y)
       7  {
       8    #pragma omp target map (alloc:x[0]) map (alloc:y[0:8])
       9    {
      10      int i;
      11      for (i = 0; i < 8; i++)
      12        if (y[i] != 2 + i)
      13  	break;
      14      if (i != 8 || *x != 1)
      15        *x = 6;
      16      else
      17        {
      18  	*x = 8;
      19  	for (i = 0; i < 8; i++)
      20  	  y[i] = 9 + i;
      21        }
      22    }
      23    #pragma omp target update from (y[0:8]) from (x[0])
      24  }
      25  
      26  void
      27  bar (void)
      28  {
      29    int x = 1, y[32] = { 0 };
      30    #pragma omp target data map (to:y[0:32]) map (to:x)
      31      ;
      32  }
      33  
      34  int
      35  main ()
      36  {
      37    int x = 1, y[8] = { 2, 3, 4, 5, 6, 7, 8, 9 }, i;
      38    #pragma omp target data map (to:y[0:8]) map (to:x)
      39      ;
      40    #pragma omp target data map (to:y[0:8]) map (to:x)
      41      {
      42        #pragma omp target update from (y[0:8]) from (x)
      43      }
      44  
      45    #pragma omp target data map (to:y[0:8]) map (to:x)
      46      foo (&x, &y[0]);
      47  
      48    if (x != 8)
      49      abort ();
      50    for (i = 0; i < 8; i++)
      51      if (y[i] != 9 + i)
      52        abort ();
      53  
      54    return 0;
      55  }