r197408 - Maybe add new warning for shadowing simple tag types
Kaelyn Uhrain
rikka at google.com
Mon Dec 16 11:19:13 PST 2013
Author: rikka
Date: Mon Dec 16 13:19:13 2013
New Revision: 197408
URL: http://llvm.org/viewvc/llvm-project?rev=197408&view=rev
Log:
Maybe add new warning for shadowing simple tag types
Modified:
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/lib/Sema/SemaDecl.cpp
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=197408&r1=197407&r2=197408&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Dec 16 13:19:13 2013
@@ -3662,6 +3662,10 @@ def err_redefinition_different_type : Er
"redefinition of %0 with a different type%diff{: $ vs $|}1,2">;
def err_redefinition_different_kind : Error<
"redefinition of %0 as different kind of symbol">;
+def warn_declaration_shadows_tag_type : Warning<
+ "declaration of %0 shadows %1 %0; '%1' tag will be needed to refer to the %1">,
+ InGroup<Shadow>, DefaultIgnore;
+def note_shadowed_tag_type_declaration : Note<"%1 %0 declared here">;
def warn_forward_class_redefinition : Warning<
"redefinition of forward class %0 of a typedef name of an object type is ignored">,
InGroup<DiagGroup<"objc-forward-class-redefinition">>;
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=197408&r1=197407&r2=197408&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Dec 16 13:19:13 2013
@@ -4398,8 +4398,14 @@ NamedDecl *Sema::HandleDeclarator(Scope
// tag type. Note that this does does not apply if we're declaring a
// typedef (C++ [dcl.typedef]p4).
if (Previous.isSingleTagDecl() &&
- D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef)
+ D.getDeclSpec().getStorageClassSpec() != DeclSpec::SCS_typedef) {
+ TagDecl *TD = Previous.getAsSingle<TagDecl>();
+ Diag(D.getIdentifierLoc(), diag::warn_declaration_shadows_tag_type)
+ << Name << TD->getKindName();
+ Diag(TD->getLocation(), diag::note_shadowed_tag_type_declaration)
+ << Name << TD->getKindName();
Previous.clear();
+ }
// Check that there are no default arguments other than in the parameters
// of a function declaration (C++ only).
More information about the cfe-commits
mailing list