aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn McCall <rjmccall@apple.com>2010-02-14 01:03:10 +0000
committerJohn McCall <rjmccall@apple.com>2010-02-14 01:03:10 +0000
commit23e907ab9119ccfdff17b3808a770c5a6707fb95 (patch)
treee44f61a17c3c6bfc84850c89c1e727da48e558aa
parent8f7af125c0dddb73dfda2ddb6b5c61d61a15cb15 (diff)
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
-rw-r--r--include/clang/Basic/DiagnosticParseKinds.td2
-rw-r--r--lib/Parse/ParseDecl.cpp2
-rw-r--r--test/Parser/declarators.c4
3 files changed, 4 insertions, 4 deletions
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