1/* PR middle-end/39154 */ 2/* { dg-do compile } */ 3/* { dg-options "-O2 -std=gnu99" } */ 4 5extern void abort (void); 6 7int n = 20; 8 9int 10main (void) 11{ 12 int a[n], b[n][n]; 13 14#pragma omp parallel for 15 for (int i = 0; i < n; i++) 16 { 17 a[i] = i + 1; 18#pragma omp parallel for 19 for (int j = 0; j < n; j++) 20 b[i][j] = a[i]; 21 } 22 23 for (int i = 0; i < n; i++) 24 { 25 for (int j = 0; j < n; j++) 26 if (b[i][j] != i + 1) 27 abort (); 28 if (a[i] != i + 1) 29 abort (); 30 } 31 32#pragma omp parallel for shared (n, a, b) 33 for (int i = 0; i < n; i++) 34 { 35 a[i] = i + 3; 36#pragma omp parallel for 37 for (int j = 0; j < n; j++) 38 b[i][j] = a[i]; 39 } 40 41 for (int i = 0; i < n; i++) 42 { 43 for (int j = 0; j < n; j++) 44 if (b[i][j] != i + 3) 45 abort (); 46 if (a[i] != i + 3) 47 abort (); 48 } 49 50#pragma omp parallel for 51 for (int i = 0; i < n; i++) 52 { 53 a[i] = i + 5; 54#pragma omp parallel for shared (n, a, b) 55 for (int j = 0; j < n; j++) 56 b[i][j] = a[i]; 57 } 58 59 for (int i = 0; i < n; i++) 60 { 61 for (int j = 0; j < n; j++) 62 if (b[i][j] != i + 5) 63 abort (); 64 if (a[i] != i + 5) 65 abort (); 66 } 67 68#pragma omp parallel for shared (n, a, b) 69 for (int i = 0; i < n; i++) 70 { 71 a[i] = i + 7; 72#pragma omp parallel for shared (n, a, b) 73 for (int j = 0; j < n; j++) 74 b[i][j] = a[i]; 75 } 76 77 for (int i = 0; i < n; i++) 78 { 79 for (int j = 0; j < n; j++) 80 if (b[i][j] != i + 7) 81 abort (); 82 if (a[i] != i + 7) 83 abort (); 84 } 85 86#pragma omp parallel for private (a, b) 87 for (int i = 0; i < n; i++) 88 { 89 a[i] = i + 1; 90#pragma omp parallel for 91 for (int j = 0; j < n; j++) 92 b[i][j] = a[i]; 93 } 94 95#pragma omp parallel for private (a, b) 96 for (int i = 0; i < n; i++) 97 { 98 a[i] = i + 1; 99#pragma omp parallel for private (b) 100 for (int j = 0; j < n; j++) 101 b[i][j] = a[i]; 102 } 103 104 return 0; 105} 106