openmp: Diagnose invalid OpenMP schedule(simd, static)

2020-06-16  Jakub Jelinek  <jakub@redhat.com>

gcc/c/
	* c-parser.c (c_parser_omp_clause_schedule): Reject modifier separated
	from kind by comma rather than colon.
gcc/cp/
	* parser.c (cp_parser_omp_clause_schedule): Reject modifier separated
	from kind by comma rather than colon.
gcc/testsuite/
	* c-c++-common/gomp/schedule-modifiers-2.c: New test.
This commit is contained in:
Jakub Jelinek 2020-06-16 16:30:05 +02:00
parent e70fbee1a3
commit fab46c5df7
3 changed files with 30 additions and 2 deletions

View File

@ -14782,6 +14782,7 @@ c_parser_omp_clause_schedule (c_parser *parser, tree list)
c = build_omp_clause (loc, OMP_CLAUSE_SCHEDULE);
location_t comma = UNKNOWN_LOCATION;
while (c_parser_next_token_is (parser, CPP_NAME))
{
tree kind = c_parser_peek_token (parser)->value;
@ -14794,16 +14795,22 @@ c_parser_omp_clause_schedule (c_parser *parser, tree list)
modifiers |= OMP_CLAUSE_SCHEDULE_NONMONOTONIC;
else
break;
comma = UNKNOWN_LOCATION;
c_parser_consume_token (parser);
if (nmodifiers++ == 0
&& c_parser_next_token_is (parser, CPP_COMMA))
{
comma = c_parser_peek_token (parser)->location;
c_parser_consume_token (parser);
}
else
{
c_parser_require (parser, CPP_COLON, "expected %<:%>");
break;
}
}
if (comma != UNKNOWN_LOCATION)
error_at (comma, "expected %<:%>");
if ((modifiers & (OMP_CLAUSE_SCHEDULE_MONOTONIC
| OMP_CLAUSE_SCHEDULE_NONMONOTONIC))

View File

@ -35864,6 +35864,7 @@ cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location
c = build_omp_clause (location, OMP_CLAUSE_SCHEDULE);
location_t comma = UNKNOWN_LOCATION;
while (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
{
tree id = cp_lexer_peek_token (parser->lexer)->u.value;
@ -35876,16 +35877,22 @@ cp_parser_omp_clause_schedule (cp_parser *parser, tree list, location_t location
modifiers |= OMP_CLAUSE_SCHEDULE_NONMONOTONIC;
else
break;
comma = UNKNOWN_LOCATION;
cp_lexer_consume_token (parser->lexer);
if (nmodifiers++ == 0
&& cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
{
comma = cp_lexer_peek_token (parser->lexer)->location;
cp_lexer_consume_token (parser->lexer);
}
else
{
cp_parser_require (parser, CPP_COLON, RT_COLON);
break;
}
}
if (comma != UNKNOWN_LOCATION)
error_at (comma, "expected %<:%>");
if (cp_lexer_next_token_is (parser->lexer, CPP_NAME))
{

View File

@ -0,0 +1,14 @@
void
foo (void)
{
int i = 0;
#pragma omp for simd schedule(simd, static) /* { dg-error "expected ':'" } */
for (i = 0; i < 16; i++)
;
#pragma omp for simd schedule(monotonic, dynamic) /* { dg-error "expected ':'" } */
for (i = 0; i < 16; i++)
;
#pragma omp for simd schedule(nonmonotonic, guided, 1) /* { dg-error "expected ':'" } */
for (i = 0; i < 16; i++)
;
}