Commit d853ee42 by Nicola Pero Committed by Nicola Pero

In gcc/: 2011-01-12 Nicola Pero <nicola.pero@meta-innovation.com>

In gcc/:
2011-01-12  Nicola Pero  <nicola.pero@meta-innovation.com>	

	* c-parser.c (c_parser_objc_at_property_declaration): Improved
	error message.	
	
2011-01-12  Nicola Pero  <nicola.pero@meta-innovation.com>

	* c-parser.c (c_lex_one_token): Updated and reindented some
	comments.  No changes in code.

In gcc/cp/:
2011-01-12  Nicola Pero  <nicola.pero@meta-innovation.com>

	* parser.c (cp_parser_objc_at_property_declaration): Improved
	error message.

In gcc/testsuite/:
2011-01-12  Nicola Pero  <nicola.pero@meta-innovation.com>

	* objc.dg/property/at-property-29.m: New.
	* obj-c++.dg/property/at-property-29.mm: New.

From-SVN: r168698
parent f2ee78b8
2011-01-12 Nicola Pero <nicola.pero@meta-innovation.com>
* c-parser.c (c_parser_objc_at_property_declaration): Improved
error message.
2011-01-12 Nicola Pero <nicola.pero@meta-innovation.com>
* c-parser.c (c_lex_one_token): Updated and reindented some
comments. No changes in code.
2011-01-11 Ian Lance Taylor <iant@google.com> 2011-01-11 Ian Lance Taylor <iant@google.com>
* godump.c (go_output_var): Don't output the variable if there is * godump.c (go_output_var): Don't output the variable if there is
......
...@@ -253,8 +253,7 @@ c_lex_one_token (c_parser *parser, c_token *token) ...@@ -253,8 +253,7 @@ c_lex_one_token (c_parser *parser, c_token *token)
/* We found an Objective-C "pq" keyword (in, out, /* We found an Objective-C "pq" keyword (in, out,
inout, bycopy, byref, oneway). They need special inout, bycopy, byref, oneway). They need special
care because the interpretation depends on the care because the interpretation depends on the
context. context. */
*/
if (parser->objc_pq_context) if (parser->objc_pq_context)
{ {
token->type = CPP_KEYWORD; token->type = CPP_KEYWORD;
...@@ -275,21 +274,19 @@ c_lex_one_token (c_parser *parser, c_token *token) ...@@ -275,21 +274,19 @@ c_lex_one_token (c_parser *parser, c_token *token)
you can't use 'in' as the name of the running you can't use 'in' as the name of the running
variable in a C for loop. We could potentially variable in a C for loop. We could potentially
try to add code here to disambiguate, but it try to add code here to disambiguate, but it
seems a reasonable limitation. seems a reasonable limitation. */
*/
token->type = CPP_KEYWORD; token->type = CPP_KEYWORD;
token->keyword = rid_code; token->keyword = rid_code;
break; break;
} }
/* Else, "pq" keywords outside of the "pq" context are /* Else, "pq" keywords outside of the "pq" context are
not keywords, and we fall through to the code for not keywords, and we fall through to the code for
normal tokens. normal tokens. */
*/
} }
else if (c_dialect_objc () && OBJC_IS_PATTR_KEYWORD (rid_code)) else if (c_dialect_objc () && OBJC_IS_PATTR_KEYWORD (rid_code))
{ {
/* We found an Objective-C "property attribute" keyword /* We found an Objective-C "property attribute"
(readonly, copies, getter, setter, ivar). These are keyword (getter, setter, readonly, etc). These are
only valid in the property context. */ only valid in the property context. */
if (parser->objc_property_attr_context) if (parser->objc_property_attr_context)
{ {
...@@ -310,8 +307,7 @@ c_lex_one_token (c_parser *parser, c_token *token) ...@@ -310,8 +307,7 @@ c_lex_one_token (c_parser *parser, c_token *token)
protected, public, try, catch, throw) without a protected, public, try, catch, throw) without a
preceding '@' sign. Do nothing and fall through to preceding '@' sign. Do nothing and fall through to
the code for normal tokens (in C++ we would still the code for normal tokens (in C++ we would still
consider the CXX ones keywords, but not in C). consider the CXX ones keywords, but not in C). */
*/
; ;
} }
else else
...@@ -7961,8 +7957,12 @@ c_parser_objc_at_property_declaration (c_parser *parser) ...@@ -7961,8 +7957,12 @@ c_parser_objc_at_property_declaration (c_parser *parser)
case RID_SETTER: case RID_SETTER:
if (c_parser_next_token_is_not (parser, CPP_EQ)) if (c_parser_next_token_is_not (parser, CPP_EQ))
{ {
c_parser_error (parser, if (keyword == RID_GETTER)
"getter/setter attribute must be followed by %<=%>"); c_parser_error (parser,
"missing %<=%> (after %<getter%> attribute)");
else
c_parser_error (parser,
"missing %<=%> (after %<setter%> attribute)");
syntax_error = true; syntax_error = true;
break; break;
} }
......
2011-01-12 Nicola Pero <nicola.pero@meta-innovation.com>
* parser.c (cp_parser_objc_at_property_declaration): Improved
error message.
2011-01-11 Dodji Seketeli <dodji@redhat.com> 2011-01-11 Dodji Seketeli <dodji@redhat.com>
PR debug/46955 PR debug/46955
......
...@@ -23087,8 +23087,12 @@ cp_parser_objc_at_property_declaration (cp_parser *parser) ...@@ -23087,8 +23087,12 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
case RID_SETTER: case RID_SETTER:
if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ)) if (cp_lexer_next_token_is_not (parser->lexer, CPP_EQ))
{ {
cp_parser_error (parser, if (keyword == RID_GETTER)
"getter/setter/ivar attribute must be followed by %<=%>"); cp_parser_error (parser,
"missing %<=%> (after %<getter%> attribute)");
else
cp_parser_error (parser,
"missing %<=%> (after %<setter%> attribute)");
syntax_error = true; syntax_error = true;
break; break;
} }
...@@ -23128,13 +23132,17 @@ cp_parser_objc_at_property_declaration (cp_parser *parser) ...@@ -23128,13 +23132,17 @@ cp_parser_objc_at_property_declaration (cp_parser *parser)
if (syntax_error) if (syntax_error)
break; break;
if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA)) if (cp_lexer_next_token_is (parser->lexer, CPP_COMMA))
cp_lexer_consume_token (parser->lexer); cp_lexer_consume_token (parser->lexer);
else else
break; 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)) if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_CLOSE_PAREN))
{ {
cp_parser_skip_to_closing_parenthesis (parser, cp_parser_skip_to_closing_parenthesis (parser,
......
2011-01-12 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 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE> 2011-01-11 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* go.test/go-test.exp (go-set-goarch): New proc. * go.test/go-test.exp (go-set-goarch): New proc.
......
/* 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
/* 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
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