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>
* c-typeck.c: Include spellcheck.h.
......
......@@ -5757,12 +5757,12 @@ c_parser_for_statement (c_parser *parser, bool ivdep)
{
c_token *token = c_parser_peek_token (parser);
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)
token->id_kind = C_ID_TYPENAME;
else if (VAR_P (decl))
token->id_kind = C_ID_ID;
}
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>
* 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