long stride = 1;
int pass;
bool any_negate = false;
+ bool has_braces = true;
*negatep = false;
while (isspace ((unsigned char) *env))
++env;
++env;
}
if (*env != '{')
- return false;
- ++env;
- while (isspace ((unsigned char) *env))
- ++env;
+ {
+ char *end;
+ unsigned long this_num;
+
+ errno = 0;
+ this_num = strtoul (env, &end, 10);
+ if (errno || end == env)
+ return false;
+ env = end - 1;
+ has_braces = false;
+ if (gomp_places_list
+ && !gomp_affinity_add_cpus (p, this_num, 1, 1, false))
+ return false;
+ }
+ else
+ {
+ ++env;
+ while (isspace ((unsigned char) *env))
+ ++env;
+ }
start = env;
- for (pass = 0; pass < (any_negate ? 2 : 1); pass++)
+ for (pass = 0; pass < (any_negate ? 2 : has_braces); pass++)
{
env = start;
do
if (*env == ':')
{
++env;
+ if (this_negate)
+ return false;
while (isspace ((unsigned char) *env))
++env;
errno = 0;
++env;
}
}
- if (this_negate && this_len != 1)
- return false;
if (gomp_places_list && pass == this_negate)
{
if (this_negate)
if (*env == ':')
{
char *end;
+ if (*negatep)
+ return false;
++env;
while (isspace ((unsigned char) *env))
++env;
++env;
}
}
- if (*negatep && len != 1)
- return false;
*envp = env;
*lenp = len;
*stridep = stride;
@item @code{present} argument to @code{defaultmap} clause @tab N @tab
@item @code{omp_set_num_teams}, @code{omp_set_teams_thread_limit},
@code{omp_get_max_teams}, @code{omp_get_teams_thread_limit} runtime
- routines @tab N @tab
+ routines @tab Y @tab
@item @code{omp_target_is_accessible} runtime routine @tab N @tab
@item @code{omp_target_memcpy_async} and @code{omp_target_memcpy_rect_async}
runtime routines @tab N @tab
@code{ompt_callback_target_emi_t}, @code{ompt_callback_target_map_emi_t}
and @code{ompt_callback_target_submit_emi_t} @tab N @tab
@item @code{ompt_callback_error_t} type @tab N @tab
-@item @code{OMP_PLACES} syntax was extension @tab N @tab
+@item @code{OMP_PLACES} syntax extensions @tab Y @tab
@item @code{OMP_NUM_TEAMS} and @code{OMP_TEAMS_THREAD_LIMIT} environment
- variables @tab N @tab
+ variables @tab Y @tab
@end multitable
@unnumberedsubsec Other new OpenMP 5.1 features
};
struct places
{
- char name[40];
+ char name[50];
int count;
struct place places[8];
} places_array[] = {
{ { 1, 1 }, { 2, 1 }, { 3, 1 },
{ 4, 1 }, { 5, 1 }, { 6, 1 }, { 7, 1 } } },
{ "{0,1},{3,2,4},{6,5,!6},{6},{7:2:-1,!6}", 5,
- { { 0, 2 }, { 2, 3 }, { 5, 1 }, { 6, 1 }, { 7, 1 } } }
+ { { 0, 2 }, { 2, 3 }, { 5, 1 }, { 6, 1 }, { 7, 1 } } },
+ { "1,2,{2,3,!2},3,3,!3,!{5:3:-1,!4,!5},{4},5,!4,!5", 3,
+ { { 1, 1 }, { 2, 1 }, { 3, 1 } } }
};
unsigned long contig_cpucount;