From: John McCall Date: Sun, 14 Feb 2010 01:03:10 +0000 (+0000) Subject: Improve the diagnostic given when referring to a tag type without a tag (in C) X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=23e907ab9119ccfdff17b3808a770c5a6707fb95;p=clang Improve the diagnostic given when referring to a tag type without a tag (in C) or that's been hidden by a non-type (in C++). The ideal C++ diagnostic here would note the hiding declaration, but this is a good start. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96141 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticParseKinds.td b/include/clang/Basic/DiagnosticParseKinds.td index 04e3daffe7..bc26c3b0da 100644 --- a/include/clang/Basic/DiagnosticParseKinds.td +++ b/include/clang/Basic/DiagnosticParseKinds.td @@ -173,7 +173,7 @@ def err_friend_invalid_in_context : Error< def err_unknown_typename : Error< "unknown type name %0">; def err_use_of_tag_name_without_tag : Error< - "use of tagged type %0 without '%1' tag">; + "must use '%1' tag to refer to type %0%select{| in this scope}2">; def err_expected_ident_in_using : Error< "expected an identifier in using directive">; def err_unexected_colon_in_nested_name_spec : Error< diff --git a/lib/Parse/ParseDecl.cpp b/lib/Parse/ParseDecl.cpp index 01156a1e96..8aa69363be 100644 --- a/lib/Parse/ParseDecl.cpp +++ b/lib/Parse/ParseDecl.cpp @@ -733,7 +733,7 @@ bool Parser::ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS, if (TagName) { Diag(Loc, diag::err_use_of_tag_name_without_tag) - << Tok.getIdentifierInfo() << TagName + << Tok.getIdentifierInfo() << TagName << getLang().CPlusPlus << CodeModificationHint::CreateInsertion(Tok.getLocation(),TagName); // Parse this as a tag as if the missing tag were present. diff --git a/test/Parser/declarators.c b/test/Parser/declarators.c index 6dd32d9676..91803c1c5d 100644 --- a/test/Parser/declarators.c +++ b/test/Parser/declarators.c @@ -47,8 +47,8 @@ int test6() { return a; } // a should be declared. // Use of tagged type without tag. rdar://6783347 struct xyz { int y; }; enum myenum { ASDFAS }; -xyz b; // expected-error {{use of tagged type 'xyz' without 'struct' tag}} -myenum c; // expected-error {{use of tagged type 'myenum' without 'enum' tag}} +xyz b; // expected-error {{must use 'struct' tag to refer to type 'xyz'}} +myenum c; // expected-error {{must use 'enum' tag to refer to type 'myenum'}} float *test7() { // We should recover 'b' by parsing it with a valid type of "struct xyz", which