diff options
author | Nicola Pero <nicola@gcc.gnu.org> | 2011-06-06 22:09:47 +0000 |
---|---|---|
committer | Nicola Pero <nicola@gcc.gnu.org> | 2011-06-06 22:09:47 +0000 |
commit | 889ec77132ca388f1d4a3349db729564969feac2 (patch) | |
tree | a941dba39e61627d0d4887a796b9d97673b3dab4 /gcc | |
parent | a651bcbe5e945d5e6f4f9597b400040bed984460 (diff) | |
download | gcc-889ec77132ca388f1d4a3349db729564969feac2.zip gcc-889ec77132ca388f1d4a3349db729564969feac2.tar.gz gcc-889ec77132ca388f1d4a3349db729564969feac2.tar.bz2 |
In gcc/cp/: 2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>,
In gcc/cp/:
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>,
PR obj-c++/48275
* parser.c (cp_parser_objc_at_property_declaration): Allow setter
and getter names to use all the allowed method names.
In gcc/testsuite/:
2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>
PR objc-++/48275
* obj-c++.dg/property/cxx-property-1.mm: New.
* obj-c++.dg/property/cxx-property-2.mm: New.
From-SVN: r174726
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 18 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm | 10 | ||||
-rw-r--r-- | gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm | 22 |
5 files changed, 55 insertions, 7 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index dbe6ffb..c3826e5 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com>, + + PR obj-c++/48275 + * parser.c (cp_parser_objc_at_property_declaration): Allow setter + and getter names to use all the allowed method names. + 2011-06-06 Jason Merrill <jason@redhat.com> PR c++/49298 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index a410082..1d182a3 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -23187,7 +23187,7 @@ cp_parser_objc_at_property_declaration (cp_parser *parser) break; } cp_lexer_consume_token (parser->lexer); /* eat the = */ - if (cp_lexer_next_token_is_not (parser->lexer, CPP_NAME)) + if (!cp_parser_objc_selector_p (cp_lexer_peek_token (parser->lexer)->type)) { cp_parser_error (parser, "expected identifier"); syntax_error = true; @@ -23196,10 +23196,12 @@ cp_parser_objc_at_property_declaration (cp_parser *parser) if (keyword == RID_SETTER) { if (property_setter_ident != NULL_TREE) - cp_parser_error (parser, "the %<setter%> attribute may only be specified once"); + { + cp_parser_error (parser, "the %<setter%> attribute may only be specified once"); + cp_lexer_consume_token (parser->lexer); + } else - property_setter_ident = cp_lexer_peek_token (parser->lexer)->u.value; - cp_lexer_consume_token (parser->lexer); + property_setter_ident = cp_parser_objc_selector (parser); if (cp_lexer_next_token_is_not (parser->lexer, CPP_COLON)) cp_parser_error (parser, "setter name must terminate with %<:%>"); else @@ -23208,10 +23210,12 @@ cp_parser_objc_at_property_declaration (cp_parser *parser) else { if (property_getter_ident != NULL_TREE) - cp_parser_error (parser, "the %<getter%> attribute may only be specified once"); + { + cp_parser_error (parser, "the %<getter%> attribute may only be specified once"); + cp_lexer_consume_token (parser->lexer); + } else - property_getter_ident = cp_lexer_peek_token (parser->lexer)->u.value; - cp_lexer_consume_token (parser->lexer); + property_getter_ident = cp_parser_objc_selector (parser); } break; default: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7d9a9c2..889ba09 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2011-06-06 Nicola Pero <nicola.pero@meta-innovation.com> + + PR objc-++/48275 + * obj-c++.dg/property/cxx-property-1.mm: New. + * obj-c++.dg/property/cxx-property-2.mm: New. + 2011-06-06 Jason Merrill <jason@redhat.com> * g++.dg/cpp0x/regress/ptrmem1.C: New. diff --git a/gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm b/gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm new file mode 100644 index 0000000..3c6f93e --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm @@ -0,0 +1,10 @@ +/* Testcase from PR obj-c++/48275. */ +/* { dg-do compile } */ + +@interface Test +{ + int ns; +} +@property (getter=namespace) int ns; + +@end diff --git a/gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm b/gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm new file mode 100644 index 0000000..4e085b3 --- /dev/null +++ b/gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm @@ -0,0 +1,22 @@ +/* { dg-do compile } */ + +/* All these C++ keywords are acceptable in ObjC method names, hence + should be accepted for property getters and setters. */ + +@interface Test +{ + Class isa; +} +@property (getter=namespace) int p0; +@property (setter=namespace:) int p1; +@property (getter=and) int p2; +@property (setter=and:) int p3; +@property (getter=class) int p4; +@property (setter=class:) int p5; +@property (getter=new) int p6; +@property (setter=new:) int p7; +@property (getter=delete) int p8; +@property (setter=delete:) int p9; +@property (getter=delete) int p10; +@property (setter=delete:) int p11; +@end |