Commit ec8b536f by Marek Polacek Committed by Marek Polacek

re PR c/68320 (internal compiler error: in declspecs_add_type)

	PR c/68320
	* c-parser.c (c_parser_for_statement): Treat unknown tokens as IDs.

	* gcc.dg/pr68320.c: New test.

From-SVN: r230322
parent 20e8b68f
2015-11-13 Marek Polacek <polacek@redhat.com>
PR c/68320
* c-parser.c (c_parser_for_statement): Treat unknown tokens as IDs.
2015-11-13 David Malcolm <dmalcolm@redhat.com> 2015-11-13 David Malcolm <dmalcolm@redhat.com>
* c-typeck.c: Include spellcheck.h. * c-typeck.c: Include spellcheck.h.
......
...@@ -5757,12 +5757,12 @@ c_parser_for_statement (c_parser *parser, bool ivdep) ...@@ -5757,12 +5757,12 @@ c_parser_for_statement (c_parser *parser, bool ivdep)
{ {
c_token *token = c_parser_peek_token (parser); c_token *token = c_parser_peek_token (parser);
tree decl = lookup_name (token->value); tree decl = lookup_name (token->value);
if (decl == NULL_TREE) 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) else if (TREE_CODE (decl) == TYPE_DECL)
token->id_kind = C_ID_TYPENAME; token->id_kind = C_ID_TYPENAME;
else if (VAR_P (decl))
token->id_kind = C_ID_ID;
} }
token_indent_info next_tinfo token_indent_info next_tinfo
......
2015-11-13 Marek Polacek <polacek@redhat.com>
PR c/68320
* gcc.dg/pr68320.c: New test.
2015-11-13 Nathan Sidwell <nathan@codesourcery.com> 2015-11-13 Nathan Sidwell <nathan@codesourcery.com>
* c-c++-common/goacc/data-default-1.c: Correct expected * c-c++-common/goacc/data-default-1.c: Correct expected
......
/* PR c/68320 */
/* { dg-do compile } */
/* { dg-options "" } */
void
fn1 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
;
T x; /* { dg-error "unknown type name" } */
}
void
fn2 (int i)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
i = 5;
T x; /* { dg-error "unknown type name" } */
}
void
fn3 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
{
}
T *x; /* { dg-error "unknown type name" } */
}
void
fn4 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
;
T, T; /* { dg-error "undeclared" } */
}
void
fn5 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
;
T = 10; /* { dg-error "undeclared" } */
}
void
fn6 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
;
T[0]; /* { dg-error "undeclared" } */
}
void
fn7 (void)
{
for (typedef int T;;) /* { dg-error "declaration of non-variable" } */
if (1)
;
T (); /* { dg-warning "implicit declaration" } */
}
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