[clang-tools-extra] 415acb2 - Revert "[clang-itdy] Simplify virtual near-miss check"
Stephen Kelly via cfe-commits
cfe-commits at lists.llvm.org
Sat Feb 27 11:31:06 PST 2021
Author: Stephen Kelly
Date: 2021-02-27T19:30:38Z
New Revision: 415acb2c5994a95be739b908785ea8260baa18fd
URL: https://github.com/llvm/llvm-project/commit/415acb2c5994a95be739b908785ea8260baa18fd
DIFF: https://github.com/llvm/llvm-project/commit/415acb2c5994a95be739b908785ea8260baa18fd.diff
LOG: Revert "[clang-itdy] Simplify virtual near-miss check"
This reverts commit 9a4b574dd6a07d6811356529ebb8a3f15d6e40a2.
Added:
Modified:
clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.h
clang-tools-extra/test/clang-tidy/checkers/bugprone-virtual-near-miss.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
index dc810c694874..150b517811b6 100644
--- a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
+++ b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.cpp
@@ -216,9 +216,10 @@ bool VirtualNearMissCheck::isOverriddenByDerivedClass(
void VirtualNearMissCheck::registerMatchers(MatchFinder *Finder) {
Finder->addMatcher(
- cxxMethodDecl(unless(anyOf(isOverride(), cxxConstructorDecl(),
- cxxDestructorDecl(), cxxConversionDecl(),
- isStatic(), isOverloadedOperator())))
+ cxxMethodDecl(
+ unless(anyOf(isOverride(), isImplicit(), cxxConstructorDecl(),
+ cxxDestructorDecl(), cxxConversionDecl(), isStatic(),
+ isOverloadedOperator())))
.bind("method"),
this);
}
@@ -233,15 +234,7 @@ void VirtualNearMissCheck::check(const MatchFinder::MatchResult &Result) {
assert(DerivedRD);
for (const auto &BaseSpec : DerivedRD->bases()) {
- const auto *BaseRD = BaseSpec.getType()->getAsCXXRecordDecl();
- if (const auto *TST =
- dyn_cast<TemplateSpecializationType>(BaseSpec.getType())) {
- auto TN = TST->getTemplateName();
- BaseRD =
- dyn_cast<CXXRecordDecl>(TN.getAsTemplateDecl()->getTemplatedDecl());
- }
-
- if (BaseRD) {
+ if (const auto *BaseRD = BaseSpec.getType()->getAsCXXRecordDecl()) {
for (const auto *BaseMD : BaseRD->methods()) {
if (!isPossibleToBeOverridden(BaseMD))
continue;
@@ -257,12 +250,16 @@ void VirtualNearMissCheck::check(const MatchFinder::MatchResult &Result) {
auto Range = CharSourceRange::getTokenRange(
SourceRange(DerivedMD->getLocation()));
- diag(DerivedMD->getBeginLoc(),
- "method '%0' has a similar name and the same signature as "
- "virtual method '%1'; did you mean to override it?")
+ bool ApplyFix = !BaseMD->isTemplateInstantiation() &&
+ !DerivedMD->isTemplateInstantiation();
+ auto Diag =
+ diag(DerivedMD->getBeginLoc(),
+ "method '%0' has a similar name and the same signature as "
+ "virtual method '%1'; did you mean to override it?")
<< DerivedMD->getQualifiedNameAsString()
- << BaseMD->getQualifiedNameAsString()
- << FixItHint::CreateReplacement(Range, BaseMD->getName());
+ << BaseMD->getQualifiedNameAsString();
+ if (ApplyFix)
+ Diag << FixItHint::CreateReplacement(Range, BaseMD->getName());
}
}
}
diff --git a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.h b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.h
index ec902515f706..69ae278f2e2c 100644
--- a/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.h
+++ b/clang-tools-extra/clang-tidy/bugprone/VirtualNearMissCheck.h
@@ -32,9 +32,6 @@ class VirtualNearMissCheck : public ClangTidyCheck {
}
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
- llvm::Optional<TraversalKind> getCheckTraversalKind() const override {
- return TK_IgnoreUnlessSpelledInSource;
- }
private:
/// Check if the given method is possible to be overridden by some other
diff --git a/clang-tools-extra/test/clang-tidy/checkers/bugprone-virtual-near-miss.cpp b/clang-tools-extra/test/clang-tidy/checkers/bugprone-virtual-near-miss.cpp
index f3f8d3225847..553d2f45a98b 100644
--- a/clang-tools-extra/test/clang-tidy/checkers/bugprone-virtual-near-miss.cpp
+++ b/clang-tools-extra/test/clang-tidy/checkers/bugprone-virtual-near-miss.cpp
@@ -44,8 +44,9 @@ template <typename T>
struct TDerived : TBase<T> {
virtual void tfunk(T t);
// Should not apply fix for template.
- // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: method 'TDerived::tfunk' has {{.*}} 'TBase::tfunc'
- // CHECK-FIXES: virtual void tfunc(T t);
+ // CHECK-MESSAGES: :[[@LINE-2]]:3: warning: method 'TDerived<double>::tfunk' has {{.*}} 'TBase<double>::tfunc'
+ // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: method 'TDerived<int>::tfunk' has {{.*}} 'TBase<int>::tfunc'
+ // CHECK-FIXES: virtual void tfunk(T t);
};
TDerived<int> T1;
More information about the cfe-commits
mailing list