| // RUN: %libomp-compile-and-run |
| |
| // Support for collapse of non-rectangular loop nests was added in GCC 11 |
| // UNSUPPORTED: gcc-4, gcc-5, gcc-6, gcc-7, gcc-8, gcc-9, gcc-10 |
| |
| #define N 10 |
| int arr[N][N][N]; |
| |
| int collapsed(int mp) { |
| int Cnt = 0; |
| #pragma omp for collapse(3) |
| for (int j = 0; j < mp; ++j) { |
| for (int i = j; i < mp; ++i) { |
| for (int i0 = 0; i0 < N; ++i0) { |
| arr[j][i][i0] = 1; |
| ++Cnt; |
| } |
| } |
| } |
| return Cnt; |
| } |
| |
| int test(int mp) { |
| int Failed = 0; |
| for (int j = 0; j < mp; ++j) { |
| for (int i = 0; i < mp; ++i) { |
| for (int i0 = 0; i0 < N; ++i0) { |
| if ((i < j && arr[j][i][i0] == 0) || (i >= j && arr[j][i][i0] == 1)) |
| continue; |
| ++Failed; |
| } |
| } |
| } |
| return Failed; |
| } |
| |
| int main() { |
| int Res = collapsed(N); |
| return Res == N * (N + 1) && test(N) == 0; |
| } |