Commit e1113ffb by Jakub Jelinek

c, objc: Fix up c_parser_objc_selector_arg after CPP_SCOPE changes [PR94637]

Similarly to inline asm, :: (or any other number of consecutive colons) can
appear in ObjC @selector argument and with the introduction of CPP_SCOPE
into the C FE, we need to trat CPP_SCOPE as two CPP_COLON tokens.
The C++ FE does that already that way.

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.

	* objc.dg/pr94637.m: New test.
parent 8a9ce39f
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> 2020-04-17 Jakub Jelinek <jakub@redhat.com>
PR other/94629 PR other/94629
......
...@@ -11782,15 +11782,28 @@ c_parser_objc_selector_arg (c_parser *parser) ...@@ -11782,15 +11782,28 @@ c_parser_objc_selector_arg (c_parser *parser)
{ {
tree sel = c_parser_objc_selector (parser); tree sel = c_parser_objc_selector (parser);
tree list = NULL_TREE; 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; return sel;
while (true) while (true)
{ {
if (!c_parser_require (parser, CPP_COLON, "expected %<:%>")) if (c_parser_next_token_is (parser, CPP_SCOPE))
return list; {
list = chainon (list, build_tree_list (sel, NULL_TREE)); 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); 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; break;
} }
return list; return list;
......
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> 2020-04-18 Iain Buclaw <ibuclaw@gdcproject.org>
* lib/gdc-utils.exp (gdc-convert-test): Add dg-skip-if for tests that * lib/gdc-utils.exp (gdc-convert-test): Add dg-skip-if for tests that
......
/* PR objc/94637 */
/* { dg-do compile } */
#include <objc/objc.h>
SEL
foo ()
{
return @selector(example::);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment