Commit d95036e3 by Andrew Pinski Committed by Andrew Pinski

re PR objc++/16816 (obj-c++ parser error with multi-colon selectors)

2005-09-08  Andrew Pinski  <pinskia@physics.uc.edu>

        PR obj-c++/16816
        * obj-c++.dg/selector-5.mm: New test.
        * obj-c++.dg/selector-6.mm: New test.
2005-09-08  Andrew Pinski  <pinskia@physics.uc.edu>

        PR obj-c++/16816
        * parser.c (cp_parser_objc_selector_expression): Treat CPP_SCOPE as
        two CPP_COLON.

From-SVN: r104033
parent 8f078c08
2005-09-08 Andrew Pinski <pinskia@physics.uc.edu>
PR obj-c++/16816
* parser.c (cp_parser_objc_selector_expression): Treat CPP_SCOPE as
two CPP_COLON.
2005-09-07 Richard Guenther <rguenther@suse.de>
* cp-gimplify.c (cp_gimplify_expr): Create empty CONSTRUCTOR
......
......@@ -16500,27 +16500,45 @@ cp_parser_objc_selector_expression (cp_parser* parser)
cp_parser_require (parser, CPP_OPEN_PAREN, "`('");
token = cp_lexer_peek_token (parser->lexer);
while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON)
while (cp_parser_objc_selector_p (token->type) || token->type == CPP_COLON
|| token->type == CPP_SCOPE)
{
tree selector = NULL_TREE;
if (token->type != CPP_COLON)
if (token->type != CPP_COLON
|| token->type == CPP_SCOPE)
selector = cp_parser_objc_selector (parser);
/* Detect if we have a unary selector. */
if (maybe_unary_selector_p
&& cp_lexer_next_token_is_not (parser->lexer, CPP_COLON))
if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)
&& cp_lexer_next_token_is_not (parser->lexer, CPP_SCOPE))
{
sel_seq = selector;
goto finish_selector;
/* Detect if we have a unary selector. */
if (maybe_unary_selector_p)
{
sel_seq = selector;
goto finish_selector;
}
else
{
cp_parser_error (parser, "expected %<:%>");
}
}
maybe_unary_selector_p = false;
cp_parser_require (parser, CPP_COLON, "`:'");
sel_seq
= chainon (sel_seq,
build_tree_list (selector, NULL_TREE));
token = cp_lexer_consume_token (parser->lexer);
if (token->type == CPP_SCOPE)
{
sel_seq
= chainon (sel_seq,
build_tree_list (selector, NULL_TREE));
sel_seq
= chainon (sel_seq,
build_tree_list (NULL_TREE, NULL_TREE));
}
else
sel_seq
= chainon (sel_seq,
build_tree_list (selector, NULL_TREE));
token = cp_lexer_peek_token (parser->lexer);
}
......
2005-09-08 Andrew Pinski <pinskia@physics.uc.edu>
PR obj-c++/16816
* obj-c++.dg/selector-5.mm: New test.
* obj-c++.dg/selector-6.mm: New test.
2005-09-08 Andrew Pinski <pinskia@physics.uc.edu>
PR objc/20574
PR objc/19324
* objc.dg/error-1.m: New test.
/* { dg-options "" } */
/* { dg-do compile } */
#include <objc/Object.h>
int main()
{
SEL foo = @selector(foo::);
return 0;
}
/* { dg-final { scan-assembler "foo::" } } */
/* { dg-options "" } */
/* { dg-do compile } */
#include <objc/Object.h>
int main()
{
SEL foo = @selector(foo: a::);
return 0;
}
/* { dg-final { scan-assembler "foo:a::" } } */
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