summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Toth <jonas.toth@gmail.com>2019-02-28 14:55:12 +0000
committerJonas Toth <jonas.toth@gmail.com>2019-02-28 14:55:12 +0000
commitda666233fe7d1748b38ae0cea0b7be357e8b6a05 (patch)
tree634650f19451872df59060457afc2102d8809818
parent2098b86b9658c0751ef00af779ab34cc7a56f01d (diff)
downloadbcm5719-llvm-da666233fe7d1748b38ae0cea0b7be357e8b6a05.tar.gz
bcm5719-llvm-da666233fe7d1748b38ae0cea0b7be357e8b6a05.zip
[clang-tidy] added cppcoreguidelines-explicit-virtual-functions
Addresses the bugzilla bug #30397. (https://bugs.llvm.org/show_bug.cgi?id=30397) modernize-use-override suggests that destructors require the override specifier and the CPP core guidelines do not recommend this. Patch by lewmpk. Differential Revision: https://reviews.llvm.org/D58731 llvm-svn: 355093
-rw-r--r--clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp6
-rw-r--r--clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp13
-rw-r--r--clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h7
-rw-r--r--clang-tools-extra/docs/ReleaseNotes.rst5
-rw-r--r--clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-explicit-virtual-functions.rst10
-rw-r--r--clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst8
-rw-r--r--clang-tools-extra/test/clang-tidy/modernize-use-override-no-destructors.cpp16
7 files changed, 62 insertions, 3 deletions
diff --git a/clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp b/clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp
index fdf2880b869..fc3a2ed3dcc 100644
--- a/clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp
+++ b/clang-tools-extra/clang-tidy/cppcoreguidelines/CppCoreGuidelinesTidyModule.cpp
@@ -12,6 +12,7 @@
#include "../misc/NonPrivateMemberVariablesInClassesCheck.h"
#include "../misc/UnconventionalAssignOperatorCheck.h"
#include "../modernize/AvoidCArraysCheck.h"
+#include "../modernize/UseOverrideCheck.h"
#include "../readability/MagicNumbersCheck.h"
#include "AvoidGotoCheck.h"
#include "InterfacesGlobalInitCheck.h"
@@ -46,6 +47,8 @@ public:
"cppcoreguidelines-avoid-goto");
CheckFactories.registerCheck<readability::MagicNumbersCheck>(
"cppcoreguidelines-avoid-magic-numbers");
+ CheckFactories.registerCheck<modernize::UseOverrideCheck>(
+ "cppcoreguidelines-explicit-virtual-functions");
CheckFactories.registerCheck<InterfacesGlobalInitCheck>(
"cppcoreguidelines-interfaces-global-init");
CheckFactories.registerCheck<MacroUsageCheck>(
@@ -91,6 +94,9 @@ public:
Opts["cppcoreguidelines-non-private-member-variables-in-classes."
"IgnoreClassesWithAllMemberVariablesBeingPublic"] = "1";
+ Opts["cppcoreguidelines-explicit-virtual-functions."
+ "IgnoreDestructors"] = "1";
+
return Options;
}
};
diff --git a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
index 6b065955f35..cd7ed6c1074 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
+++ b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.cpp
@@ -17,9 +17,20 @@ namespace clang {
namespace tidy {
namespace modernize {
+void UseOverrideCheck::storeOptions(ClangTidyOptions::OptionMap &Opts) {
+ Options.store(Opts, "IgnoreDestructors", IgnoreDestructors);
+}
+
void UseOverrideCheck::registerMatchers(MatchFinder *Finder) {
// Only register the matcher for C++11.
- if (getLangOpts().CPlusPlus11)
+ if (!getLangOpts().CPlusPlus11)
+ return;
+
+ if (IgnoreDestructors)
+ Finder->addMatcher(
+ cxxMethodDecl(isOverride(), unless(cxxDestructorDecl())).bind("method"),
+ this);
+ else
Finder->addMatcher(cxxMethodDecl(isOverride()).bind("method"), this);
}
diff --git a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
index 0f316095a8e..dc6c91845d7 100644
--- a/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
+++ b/clang-tools-extra/clang-tidy/modernize/UseOverrideCheck.h
@@ -19,9 +19,14 @@ namespace modernize {
class UseOverrideCheck : public ClangTidyCheck {
public:
UseOverrideCheck(StringRef Name, ClangTidyContext *Context)
- : ClangTidyCheck(Name, Context) {}
+ : ClangTidyCheck(Name, Context),
+ IgnoreDestructors(Options.get("IgnoreDestructors", false)) {}
void registerMatchers(ast_matchers::MatchFinder *Finder) override;
void check(const ast_matchers::MatchFinder::MatchResult &Result) override;
+ void storeOptions(ClangTidyOptions::OptionMap &Opts) override;
+
+private:
+ const bool IgnoreDestructors;
};
} // namespace modernize
diff --git a/clang-tools-extra/docs/ReleaseNotes.rst b/clang-tools-extra/docs/ReleaseNotes.rst
index 8d0c8f0a927..698997b57ef 100644
--- a/clang-tools-extra/docs/ReleaseNotes.rst
+++ b/clang-tools-extra/docs/ReleaseNotes.rst
@@ -98,6 +98,11 @@ Improvements to clang-tidy
Checks whether there are underscores in googletest test and test case names in
test macros, which is prohibited by the Googletest FAQ.
+- New alias :doc:`cppcoreguidelines-explicit-virtual-functions
+ <clang-tidy/checks/cppcoreguidelines-explicit-virtual-functions>` to
+ :doc:`modernize-use-override
+ <clang-tidy/checks/modernize-use-override>` was added.
+
- The :doc:`bugprone-argument-comment
<clang-tidy/checks/bugprone-argument-comment>` now supports
`CommentBoolLiterals`, `CommentIntegerLiterals`, `CommentFloatLiterals`,
diff --git a/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-explicit-virtual-functions.rst b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-explicit-virtual-functions.rst
new file mode 100644
index 00000000000..1af48ffd8ce
--- /dev/null
+++ b/clang-tools-extra/docs/clang-tidy/checks/cppcoreguidelines-explicit-virtual-functions.rst
@@ -0,0 +1,10 @@
+.. title:: clang-tidy - cppcoreguidelines-explicit-virtual-functions
+.. meta::
+ :http-equiv=refresh: 5;URL=cppcoreguidelines-explicit-virtual-functions.html
+
+cppcoreguidelines-explicit-virtual-functions
+============================================
+
+The cppcoreguidelines-explicit-virtual-functions check is an alias, please see
+`modernize-use-override <modernize-use-override.html>`_
+for more information.
diff --git a/clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst b/clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst
index f2c778aaae1..54538b50685 100644
--- a/clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst
+++ b/clang-tools-extra/docs/clang-tidy/checks/modernize-use-override.rst
@@ -3,5 +3,11 @@
modernize-use-override
======================
-
Use C++11's ``override`` and remove ``virtual`` where applicable.
+
+Options
+-------
+
+.. option:: IgnoreDestructors
+
+ If set to non-zero, this check will not diagnose destructors. Default is `0`.
diff --git a/clang-tools-extra/test/clang-tidy/modernize-use-override-no-destructors.cpp b/clang-tools-extra/test/clang-tidy/modernize-use-override-no-destructors.cpp
new file mode 100644
index 00000000000..eaadb07b947
--- /dev/null
+++ b/clang-tools-extra/test/clang-tidy/modernize-use-override-no-destructors.cpp
@@ -0,0 +1,16 @@
+// RUN: %check_clang_tidy %s modernize-use-override %t -- \
+// RUN: -config="{CheckOptions: [{key: modernize-use-override.IgnoreDestructors, value: 1}]}" \
+// RUN: -- -std=c++11
+
+struct Base {
+ virtual ~Base();
+ virtual void f();
+};
+
+struct Simple : public Base {
+ virtual ~Simple();
+ // CHECK-MESSAGES-NOT: warning:
+ virtual void f();
+ // CHECK-MESSAGES: :[[@LINE-1]]:16: warning: prefer using
+ // CHECK-FIXES: {{^}} void f() override;
+};
OpenPOWER on IntegriCloud