1 // PR libgomp/69555 2 // { dg-do run } 3 4 __attribute__((noinline, noclone)) void f1(int y)5f1 (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)31f2 (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()53main () 54 { 55 f1 (6); 56 f2 (6); 57 return 0; 58 } 59