1 // PR libgomp/69555
2 // { dg-do run }
3 
4 __attribute__((noinline, noclone)) void
f1(int y)5 f1 (int y)
6 {
7   int a[y - 2];
8   int (&c)[y - 2] = a;
9   for (int i = 0; i < y - 2; i++)
10     c[i] = i + 4;
11 
12   #pragma omp target firstprivate (c)
13   {
14     for (int i = 0; i < y - 2; i++)
15       {
16 	if (c[i] != i + 4)
17 	  __builtin_abort ();
18 	c[i] = i + 9;
19       }
20     asm volatile ("" : : "r" (&c[0]) : "memory");
21     for (int i = 0; i < y - 2; i++)
22       if (c[i] != i + 9)
23 	__builtin_abort ();
24   }
25   for (int i = 0; i < y - 2; i++)
26     if (c[i] != i + 4)
27       __builtin_abort ();
28 }
29 
30 __attribute__((noinline, noclone)) void
f2(int y)31 f2 (int y)
32 {
33   int a[y - 2];
34   int (&c)[y - 2] = a;
35   for (int i = 0; i < y - 2; i++)
36     c[i] = i + 4;
37 
38   #pragma omp target private (c)
39   {
40     for (int i = 0; i < y - 2; i++)
41       c[i] = i + 9;
42     asm volatile ("" : : "r" (&c[0]) : "memory");
43     for (int i = 0; i < y - 2; i++)
44       if (c[i] != i + 9)
45 	__builtin_abort ();
46   }
47   for (int i = 0; i < y - 2; i++)
48     if (c[i] != i + 4)
49       __builtin_abort ();
50 }
51 
52 int
main()53 main ()
54 {
55   f1 (6);
56   f2 (6);
57   return 0;
58 }
59