Author: danielmarjamaki Date: Fri Feb 24 03:02:44 2017 New Revision: 296100
URL: http://llvm.org/viewvc/llvm-project?rev=296100&view=rev Log: [clang-tidy] Fix readability-redundant-declaration false positive Differential Revision: https://reviews.llvm.org/D27048 Modified: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp Modified: clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp?rev=296100&r1=296099&r2=296100&view=diff ============================================================================== --- clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp (original) +++ clang-tools-extra/trunk/clang-tidy/readability/RedundantDeclarationCheck.cpp Fri Feb 24 03:02:44 2017 @@ -19,7 +19,10 @@ namespace tidy { namespace readability { void RedundantDeclarationCheck::registerMatchers(MatchFinder *Finder) { - Finder->addMatcher(namedDecl(anyOf(varDecl(), functionDecl())).bind("Decl"), + auto UnlessDefinition = unless(isDefinition()); + Finder->addMatcher(namedDecl(anyOf(varDecl(UnlessDefinition), + functionDecl(UnlessDefinition))) + .bind("Decl"), this); } @@ -41,9 +44,6 @@ void RedundantDeclarationCheck::check(co bool MultiVar = false; if (const auto *VD = dyn_cast<VarDecl>(D)) { - if (VD->getPreviousDecl()->getStorageClass() == SC_Extern && - VD->getStorageClass() != SC_Extern) - return; // Is this a multivariable declaration? for (const auto Other : VD->getDeclContext()->decls()) { if (Other != D && Other->getLocStart() == VD->getLocStart()) { @@ -51,10 +51,6 @@ void RedundantDeclarationCheck::check(co break; } } - } else { - const auto *FD = cast<FunctionDecl>(D); - if (FD->isThisDeclarationADefinition()) - return; } SourceLocation EndLoc = Lexer::getLocForEndOfToken( Modified: clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp?rev=296100&r1=296099&r2=296100&view=diff ============================================================================== --- clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp (original) +++ clang-tools-extra/trunk/test/clang-tidy/readability-redundant-declaration.cpp Fri Feb 24 03:02:44 2017 @@ -1,9 +1,9 @@ // RUN: %check_clang_tidy %s readability-redundant-declaration %t extern int Xyz; -extern int Xyz; +extern int Xyz; // Xyz // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Xyz' declaration [readability-redundant-declaration] -// CHECK-FIXES: {{^}}{{$}} +// CHECK-FIXES: {{^}}// Xyz{{$}} int Xyz = 123; extern int A; @@ -12,19 +12,25 @@ extern int A, B; // CHECK-FIXES: {{^}}extern int A, B;{{$}} extern int Buf[10]; -extern int Buf[10]; +extern int Buf[10]; // Buf[10] // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'Buf' declaration -// CHECK-FIXES: {{^}}{{$}} +// CHECK-FIXES: {{^}}// Buf[10]{{$}} static int f(); -static int f(); +static int f(); // f // CHECK-MESSAGES: :[[@LINE-1]]:12: warning: redundant 'f' declaration -// CHECK-FIXES: {{^}}{{$}} +// CHECK-FIXES: {{^}}// f{{$}} static int f() {} // Original check crashed for the code below. namespace std { - typedef decltype(sizeof(0)) size_t; +typedef decltype(sizeof(0)) size_t; } -void* operator new(std::size_t) __attribute__((__externally_visible__)); -void* operator new[](std::size_t) __attribute__((__externally_visible__)); +void *operator new(std::size_t) __attribute__((__externally_visible__)); +void *operator new[](std::size_t) __attribute__((__externally_visible__)); + +// Don't warn about static member definition. +struct C { + static int I; +}; +int C::I; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits