Commit 067fbd8b by Jakub Jelinek Committed by Jakub Jelinek

re PR objc/69844 (Possibly bogus error: unknown type name in ObjC code)

	PR objc/69844
	* c-parser.c (c_parser_for_statement): Properly handle ObjC classes
	in id_kind reclassification.

	* objc.dg/pr69844.m: New test.

From-SVN: r233643
parent 64a454d9
2016-02-23 Jakub Jelinek <jakub@redhat.com>
PR objc/69844
* c-parser.c (c_parser_for_statement): Properly handle ObjC classes
in id_kind reclassification.
2016-02-16 Jakub Jelinek <jakub@redhat.com>
PR c/69835
......
......@@ -5886,13 +5886,30 @@ c_parser_for_statement (c_parser *parser, bool ivdep)
if (c_parser_next_token_is (parser, CPP_NAME))
{
c_token *token = c_parser_peek_token (parser);
tree decl = lookup_name (token->value);
if (decl == NULL_TREE || VAR_P (decl))
/* If DECL is null, we don't know what this token might be. Treat
it as an ID for better diagnostics; we'll error later on. */
token->id_kind = C_ID_ID;
else if (TREE_CODE (decl) == TYPE_DECL)
token->id_kind = C_ID_TYPENAME;
if (token->id_kind != C_ID_CLASSNAME)
{
tree decl = lookup_name (token->value);
token->id_kind = C_ID_ID;
if (decl)
{
if (TREE_CODE (decl) == TYPE_DECL)
token->id_kind = C_ID_TYPENAME;
}
else if (c_dialect_objc ())
{
tree objc_interface_decl = objc_is_class_name (token->value);
/* Objective-C class names are in the same namespace as
variables and typedefs, and hence are shadowed by local
declarations. */
if (objc_interface_decl)
{
token->value = objc_interface_decl;
token->id_kind = C_ID_CLASSNAME;
}
}
}
}
token_indent_info next_tinfo
......
2016-02-23 Jakub Jelinek <jakub@redhat.com>
PR objc/69844
* objc.dg/pr69844.m: New test.
2016-02-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libgfortran/69456
......
/* PR objc/69844 */
/* { dg-do compile } */
/* { dg-options "-std=gnu99" } */
@class D;
void
foo (void)
{
for (;;)
;
D *d = (id) 0;
(void) d;
}
void
bar (void)
{
for (int D = 0; D < 30; D++)
if (1)
;
D *d = (id) 0;
(void) d;
}
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