===================================================================
@@ -1,3 +1,13 @@
+2011-01-11 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * c-parser.c (c_parser_objc_at_property_declaration): Improved
+ error message.
+
===================================================================
@@ -1,3 +1,8 @@
+2011-01-11 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * objc.dg/property/at-property-29.m: New.
+ * obj-c++.dg/property/at-property-29.mm: New.
+
2011-01-11 Richard Henderson <rth@redhat.com>
* gcc-dg/tree-ssa/vrp47.c: Disable for mn10300 as well.
===================================================================
@@ -0,0 +1,14 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, January 2011. */
+/* { dg-do compile } */
+
+#include <objc/objc.h>
+
+@interface MyRootClass
+{
+ Class isa;
+}
+/* Test missing '=' in setter/getter attributes. */
+@property (getter) int property_a; /* { dg-error "missing .=. .after .getter. attribute." } */
+@property (setter) int property_b; /* { dg-error "missing .=. .after .setter. attribute." } */
+@property (assign, getter) int property_c; /* { dg-error "missing .=. .after .getter. attribute." } */
+@end
===================================================================
@@ -0,0 +1,14 @@
+/* Contributed by Nicola Pero <nicola.pero@meta-innovation.com>, January 2011. */
+/* { dg-do compile } */
+
+#include <objc/objc.h>
+
+@interface MyRootClass
+{
+ Class isa;
+}
+/* Test missing '=' in setter/getter attributes. */
+@property (getter) int property_a; /* { dg-error "missing .=. .after .getter. attribute." } */
+@property (setter) int property_b; /* { dg-error "missing .=. .after .setter. attribute." } */
+@property (assign, getter) int property_c; /* { dg-error "missing .=. .after .getter. attribute." } */
+@end
===================================================================
@@ -1,3 +1,8 @@
+2011-01-11 Nicola Pero <nicola.pero@meta-innovation.com>
+
+ * parser.c (cp_parser_objc_at_property_declaration): Improved
+ error message.
+
2011-01-11 Jason Merrill <jason@redhat.com>
PR c++/46658
===================================================================
@@ -23087,8 +23087,12 @@ cp_parser_objc_at_property_declaration (cp_parser
case RID_SETTER:
if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
{
- cp_parser_error (parser,
- "getter/setter/ivar attribute must be followed by %<=%>");
+ if (keyword == RID_GETTER)
+ cp_parser_error (parser,
+ "missing %<=%> (after %<getter%> attribute)");
+ else
+ cp_parser_error (parser,
+ "missing %<=%> (after %<setter%> attribute)");
syntax_error = true;
break;
}
@@ -23128,13 +23132,17 @@ cp_parser_objc_at_property_declaration (cp_parser
if (syntax_error)
break;
-
+
if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
cp_lexer_consume_token (parser->lexer);
else
break;
}
+ /* FIXME: "@property (setter, assign);" will generate a spurious
+ "error: expected ‘)’ before ‘,’ token". This is because
+ cp_parser_require, unlike the C counterpart, will produce an
+ error even if we are in error recovery. */
if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
{
cp_parser_skip_to_closing_parenthesis (parser,
===================================================================
@@ -7961,8 +7957,12 @@ c_parser_objc_at_property_declaration (c_parser *p
case RID_SETTER:
if (c_parser_next_token_is_not (parser, CPP_EQ))
{
- c_parser_error (parser,
- "getter/setter attribute must be followed by %<=%>");
+ if (keyword == RID_GETTER)
+ c_parser_error (parser,
+ "missing %<=%> (after %<getter%> attribute)");
+ else
+ c_parser_error (parser,
+ "missing %<=%> (after %<setter%> attribute)");
syntax_error = true;
break;
}