[PATCH] D16377: Ensure virtual-near-miss does not crash on functions without names
Aaron Ballman via cfe-commits
cfe-commits at lists.llvm.org
Wed Jan 20 14:55:21 PST 2016
aaron.ballman updated this revision to Diff 45451.
aaron.ballman added a comment.
Now checking that both the base *and* the derived functions have names.
http://reviews.llvm.org/D16377
Files:
clang-tidy/misc/VirtualNearMissCheck.cpp
test/clang-tidy/misc-virtual-near-miss.cpp
Index: test/clang-tidy/misc-virtual-near-miss.cpp
===================================================================
--- test/clang-tidy/misc-virtual-near-miss.cpp
+++ test/clang-tidy/misc-virtual-near-miss.cpp
@@ -63,3 +63,20 @@
private:
void funk(); // Should not warn: access qualifers don't match.
};
+
+namespace {
+// Ensure this code does not crash due to special member functions.
+class _Facet_base {
+public:
+ virtual ~_Facet_base() noexcept {}
+};
+
+class facet : public _Facet_base {
+protected:
+ virtual ~facet() noexcept {}
+
+public:
+ facet(const facet&) = delete;
+ facet& operator=(const facet&) = delete;
+};
+}
Index: clang-tidy/misc/VirtualNearMissCheck.cpp
===================================================================
--- clang-tidy/misc/VirtualNearMissCheck.cpp
+++ clang-tidy/misc/VirtualNearMissCheck.cpp
@@ -244,8 +244,16 @@
if (isOverriddenByDerivedClass(BaseMD, DerivedRD))
continue;
+ // If the function has an identifier for a name, then use that
+ // identifier to determine the edit distance. If the function is a
+ // special member function without an identifier, assume the edit
+ // distance is nonzero to determine whether the signature is a near
+ // miss or not.
unsigned EditDistance =
- BaseMD->getName().edit_distance(DerivedMD->getName());
+ (BaseMD->getDeclName().isIdentifier() &&
+ DerivedMD->getDeclName().isIdentifier())
+ ? BaseMD->getName().edit_distance(DerivedMD->getName())
+ : 1;
if (EditDistance > 0 && EditDistance <= EditDistanceThreshold) {
if (checkOverrideWithoutName(Context, BaseMD, DerivedMD)) {
// A "virtual near miss" is found.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16377.45451.patch
Type: text/x-patch
Size: 1778 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160120/38e0438c/attachment.bin>
More information about the cfe-commits
mailing list