https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94637

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jakub at gcc dot gnu.org

--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
So like:
--- gcc/c/c-parser.c.jj 2020-04-17 16:59:28.727193750 +0200
+++ gcc/c/c-parser.c    2020-04-17 20:00:59.816403446 +0200
@@ -11782,15 +11782,28 @@ c_parser_objc_selector_arg (c_parser *pa
 {
   tree sel = c_parser_objc_selector (parser);
   tree list = NULL_TREE;
-  if (sel && c_parser_next_token_is_not (parser, CPP_COLON))
+  if (sel
+      && c_parser_next_token_is_not (parser, CPP_COLON)
+      && c_parser_next_token_is_not (parser, CPP_SCOPE))
     return sel;
   while (true)
     {
-      if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
-       return list;
-      list = chainon (list, build_tree_list (sel, NULL_TREE));
+      if (c_parser_next_token_is (parser, CPP_SCOPE))
+       {
+         c_parser_consume_token (parser);
+         list = chainon (list, build_tree_list (sel, NULL_TREE));
+         list = chainon (list, build_tree_list (NULL_TREE, NULL_TREE);
+       }
+      else
+       {
+         if (!c_parser_require (parser, CPP_COLON, "expected %<:%>"))
+           return list;
+         list = chainon (list, build_tree_list (sel, NULL_TREE));
+       }
       sel = c_parser_objc_selector (parser);
-      if (!sel && c_parser_next_token_is_not (parser, CPP_COLON))
+      if (!sel
+         && c_parser_next_token_is_not (parser, CPP_COLON)
+         && c_parser_next_token_is_not (parser, CPP_SCOPE))
        break;
     }
   return list;
?  Completely untested, will try later.

Reply via email to