[clang-tools-extra] r296100 - [clang-tidy] Fix readability-redundant-declaration false positive
Daniel Marjamaki via cfe-commits
cfe-commits at lists.llvm.org
Fri Feb 24 01:02:44 PST 2017
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;
More information about the cfe-commits
mailing list