diff --git a/gcc/c/ChangeLog b/gcc/c/ChangeLog index b6af67617880da16ff9376662ee3698bbb1c5784..83d1ccc8edc8f31e52313f932dac621ded78fe69 100644 --- a/gcc/c/ChangeLog +++ b/gcc/c/ChangeLog @@ -1,3 +1,9 @@ +2020-04-19 Jakub Jelinek <jakub@redhat.com> + + PR objc/94637 + * c-parser.c (c_parser_objc_selector_arg): Handle CPP_SCOPE like + two CPP_COLON tokens. + 2020-04-17 Jakub Jelinek <jakub@redhat.com> PR other/94629 diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c index 4e90d55f30f4a466e10f4ed852dde471ce67e885..ae354e6af66ac0297133143b6a250961463adb00 100644 --- a/gcc/c/c-parser.c +++ b/gcc/c/c-parser.c @@ -11782,15 +11782,28 @@ c_parser_objc_selector_arg (c_parser *parser) { 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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fb1a1539d6ad4daf4b80b53b6c21ac4cfa8a0716..9f8ae6ccccb1b6e0a83a5ecae8188a7a456f8c42 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2020-04-19 Jakub Jelinek <jakub@redhat.com> + + PR objc/94637 + * objc.dg/pr94637.m: New test. + 2020-04-18 Iain Buclaw <ibuclaw@gdcproject.org> * lib/gdc-utils.exp (gdc-convert-test): Add dg-skip-if for tests that diff --git a/gcc/testsuite/objc.dg/pr94637.m b/gcc/testsuite/objc.dg/pr94637.m new file mode 100644 index 0000000000000000000000000000000000000000..10a0ea8307b20bec57dfd82a7c0de5d04e33f60e --- /dev/null +++ b/gcc/testsuite/objc.dg/pr94637.m @@ -0,0 +1,10 @@ +/* PR objc/94637 */ +/* { dg-do compile } */ + +#include <objc/objc.h> + +SEL +foo () +{ + return @selector(example::); +}