OSDN Git Service

In gcc/cp/:
authornicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Oct 2011 08:04:33 +0000 (08:04 +0000)
committernicola <nicola@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Oct 2011 08:04:33 +0000 (08:04 +0000)
2011-10-15  Nicola Pero  <nicola.pero@meta-innovation.com>

Backport from mainline
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-10-15  Nicola Pero  <nicola.pero@meta-innovation.com>

Backport from mainline
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_6-branch@180023 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/obj-c++.dg/property/cxx-property-1.mm [new file with mode: 0644]
gcc/testsuite/obj-c++.dg/property/cxx-property-2.mm [new file with mode: 0644]

index 9e2bd38..a19bb4b 100644 (file)
@@ -1,3 +1,12 @@
+2011-10-15  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       Backport from mainline
+       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-10-13  Jason Merrill  <jason@redhat.com>
 
        PR c++/50618
index 1dc74f7..71c2ee9 100644 (file)
@@ -23176,7 +23176,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;
@@ -23185,10 +23185,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
@@ -23197,10 +23199,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:
index 93e6769..c24bf67 100644 (file)
@@ -1,3 +1,12 @@
+2011-10-15  Nicola Pero  <nicola.pero@meta-innovation.com>
+
+       Backport from mainline
+       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-10-15  Tobias Burnus  <burnus@net-b.de>
 
        PR fortran/50718
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 (file)
index 0000000..3c6f93e
--- /dev/null
@@ -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 (file)
index 0000000..4e085b3
--- /dev/null
@@ -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