/* PR middle-end/102972 */ #ifdef __cplusplus extern "C" { #endif /* From omp.h */ extern int omp_get_num_teams (void); extern void omp_set_num_teams (int); extern int omp_get_team_size (int); extern int omp_get_team_num (void); extern int omp_get_max_teams (void); extern void omp_set_teams_thread_limit (int); extern int omp_get_teams_thread_limit (void); extern int omp_is_initial_device (void); extern int omp_get_num_threads (void); #ifdef __cplusplus } #endif void valid () { #pragma omp teams { #pragma omp distribute for (int i = 0; i < 64; i++) ; int n = omp_get_num_teams (); if (n >= omp_get_team_num ()) __builtin_abort (); #pragma omp parallel for for (int i = 0; i < 64; i++) if (!omp_is_initial_device () || omp_get_num_threads () < 0) __builtin_abort (); #pragma omp loop for (int i = 0; i < 64; i++) ; } } void invalid_nest () { #pragma omp teams { #pragma distribute parallel for simd for (int i = 0; i < 64; i++) ; int n = 0; n += omp_get_team_size (0); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_team_size\[^\n\r]*' strictly nested in a 'teams' region" } */ n += omp_get_num_teams (); n += omp_get_team_num (); omp_set_num_teams (n); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_num_teams\[^\n\r]*' strictly nested in a 'teams' region" } */ n += omp_get_max_teams (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_max_teams\[^\n\r]*' strictly nested in a 'teams' region" } */ n += omp_get_teams_thread_limit (); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_get_teams_thread_limit\[^\n\r]*' strictly nested in a 'teams' region" } */ omp_set_teams_thread_limit (n); /* { dg-error "OpenMP runtime API call '\[^\n\r]*omp_set_teams_thread_limit\[^\n\r]*' strictly nested in a 'teams' region" } */ } }