void foo (void); int v; #ifdef __cplusplus extern "C" { #endif int omp_get_thread_num (void); int omp_get_num_threads (void); int omp_target_is_present (const void *, int); int omp_get_cancellation (void); #ifdef __cplusplus } #endif void f1 (int *a) { int i; #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ } void f2 (int *a) { int i; #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ } void f3 (int *a) { int i; #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel foo (); } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { #pragma omp task /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ a[i]++; } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp taskloop /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(reproducible:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ } void f4 (int *a) { int i; #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ } void f5 (int *a) { int i; #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'ordered simd', 'simd', 'loop' or 'atomic' may not be nested inside 'simd' region" } */ foo (); } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for simd order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ } void f6 (int *a) { int i; #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp parallel foo (); } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp simd for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp critical /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp ordered simd /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ foo (); } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ v++; } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic read /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ a[i] = v; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp atomic write /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c++ } } */ v = a[i]; /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" "" { target c } } */ } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { #pragma omp task /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ a[i]++; } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) { int j; #pragma omp taskloop /* { dg-error "OpenMP constructs other than 'parallel', 'loop' or 'simd' may not be nested inside a region with the 'order\\(concurrent\\)' clause" } */ for (j = 0; j < 64; j++) a[64 * i + j] = i + j; } #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_thread_num (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_thread_num\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_num_threads (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_num_threads\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_target_is_present (a + i, 0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_target_is_present\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ #pragma omp for order(unconstrained:concurrent) for (i = 0; i < 64; i++) a[i] += omp_get_cancellation (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_cancellation\[^\n\r]*' in a region with 'order\\(concurrent\\)' clause" } */ }