Hi!

I've noticed we weren't diagnosing this, fixed thusly,
bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk.

2020-06-16  Jakub Jelinek  <ja...@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.

--- gcc/c/c-parser.c.jj 2020-06-16 12:10:03.613011138 +0200
+++ gcc/c/c-parser.c    2020-06-16 12:23:41.208216697 +0200
@@ -14782,6 +14782,7 @@ c_parser_omp_clause_schedule (c_parser *
 
   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 *
        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))
-       c_parser_consume_token (parser);
+       {
+         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))
--- gcc/cp/parser.c.jj  2020-06-16 11:37:11.533023319 +0200
+++ gcc/cp/parser.c     2020-06-16 12:27:20.047032749 +0200
@@ -35868,6 +35868,7 @@ cp_parser_omp_clause_schedule (cp_parser
 
   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;
@@ -35880,16 +35881,22 @@ cp_parser_omp_clause_schedule (cp_parser
        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))
-       cp_lexer_consume_token (parser->lexer);
+       {
+         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))
     {
--- gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c.jj   2020-06-16 
12:30:11.602534085 +0200
+++ gcc/testsuite/c-c++-common/gomp/schedule-modifiers-2.c      2020-06-16 
12:29:28.035168632 +0200
@@ -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++)
+    ;
+}

        Jakub

Reply via email to