aboutsummaryrefslogtreecommitdiff
path: root/gcc/c/c-parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/c/c-parser.c')
-rw-r--r--gcc/c/c-parser.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/gcc/c/c-parser.c b/gcc/c/c-parser.c
index 4d9cbe0..d5de102 100644
--- a/gcc/c/c-parser.c
+++ b/gcc/c/c-parser.c
@@ -1539,8 +1539,16 @@ c_parser_declaration_or_fndef (c_parser *parser, bool fndef_ok,
|| c_parser_peek_2nd_token (parser)->type == CPP_MULT)
&& (!nested || !lookup_name (c_parser_peek_token (parser)->value)))
{
- error_at (here, "unknown type name %qE",
- c_parser_peek_token (parser)->value);
+ tree name = c_parser_peek_token (parser)->value;
+ error_at (here, "unknown type name %qE", name);
+ /* Give a hint to the user. This is not C++ with its implicit
+ typedef. */
+ if (tag_exists_p (RECORD_TYPE, name))
+ inform (here, "use %<struct%> keyword to refer to the type");
+ else if (tag_exists_p (UNION_TYPE, name))
+ inform (here, "use %<union%> keyword to refer to the type");
+ else if (tag_exists_p (ENUMERAL_TYPE, name))
+ inform (here, "use %<enum%> keyword to refer to the type");
/* Parse declspecs normally to get a correct pointer type, but avoid
a further "fails to be a type name" error. Refuse nested functions