<p dir="ltr">Should be fixed in <a href="http://reviews.llvm.org/D16179">http://reviews.llvm.org/D16179</a>.</p>
<div class="gmail_quote">On Jan 20, 2016 23:55, "Aaron Ballman" <<a href="mailto:aaron.ballman@gmail.com">aaron.ballman@gmail.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">aaron.ballman updated this revision to Diff 45451.<br>
aaron.ballman added a comment.<br>
<br>
Now checking that both the base *and* the derived functions have names.<br>
<br>
<br>
<a href="http://reviews.llvm.org/D16377" rel="noreferrer" target="_blank">http://reviews.llvm.org/D16377</a><br>
<br>
Files:<br>
  clang-tidy/misc/VirtualNearMissCheck.cpp<br>
  test/clang-tidy/misc-virtual-near-miss.cpp<br>
<br>
Index: test/clang-tidy/misc-virtual-near-miss.cpp<br>
===================================================================<br>
--- test/clang-tidy/misc-virtual-near-miss.cpp<br>
+++ test/clang-tidy/misc-virtual-near-miss.cpp<br>
@@ -63,3 +63,20 @@<br>
 private:<br>
   void funk(); // Should not warn: access qualifers don't match.<br>
 };<br>
+<br>
+namespace {<br>
+// Ensure this code does not crash due to special member functions.<br>
+class  _Facet_base {<br>
+public:<br>
+  virtual ~_Facet_base() noexcept {}<br>
+};<br>
+<br>
+class facet : public _Facet_base {<br>
+protected:<br>
+  virtual ~facet() noexcept {}<br>
+<br>
+public:<br>
+  facet(const facet&) = delete;<br>
+  facet& operator=(const facet&) = delete;<br>
+};<br>
+}<br>
Index: clang-tidy/misc/VirtualNearMissCheck.cpp<br>
===================================================================<br>
--- clang-tidy/misc/VirtualNearMissCheck.cpp<br>
+++ clang-tidy/misc/VirtualNearMissCheck.cpp<br>
@@ -244,8 +244,16 @@<br>
         if (isOverriddenByDerivedClass(BaseMD, DerivedRD))<br>
           continue;<br>
<br>
+        // If the function has an identifier for a name, then use that<br>
+        // identifier to determine the edit distance. If the function is a<br>
+        // special member function without an identifier, assume the edit<br>
+        // distance is nonzero to determine whether the signature is a near<br>
+        // miss or not.<br>
         unsigned EditDistance =<br>
-            BaseMD->getName().edit_distance(DerivedMD->getName());<br>
+            (BaseMD->getDeclName().isIdentifier() &&<br>
+             DerivedMD->getDeclName().isIdentifier())<br>
+                ? BaseMD->getName().edit_distance(DerivedMD->getName())<br>
+                : 1;<br>
         if (EditDistance > 0 && EditDistance <= EditDistanceThreshold) {<br>
           if (checkOverrideWithoutName(Context, BaseMD, DerivedMD)) {<br>
             // A "virtual near miss" is found.<br>
<br>
<br>
</blockquote></div>