alexfh added inline comments.

================
Comment at: clang-tidy/misc/VirtualNearMissCheck.cpp:54-55
@@ -53,16 +53,4 @@
 
   // Both types must be pointers or references to classes.
-  if (const auto *DerivedPT = DerivedReturnTy->getAs<PointerType>()) {
-    if (const auto *BasePT = BaseReturnTy->getAs<PointerType>()) {
-      DTy = DerivedPT->getPointeeType();
-      BTy = BasePT->getPointeeType();
-    }
-  } else if (const auto *DerivedRT = DerivedReturnTy->getAs<ReferenceType>()) {
-    if (const auto *BaseRT = BaseReturnTy->getAs<ReferenceType>()) {
-      DTy = DerivedRT->getPointeeType();
-      BTy = BaseRT->getPointeeType();
-    }
-  }
-
-  // The return types aren't either both pointers or references to a class 
type.
-  if (DTy.isNull())
+  if ((!BaseReturnTy->isPointerType() || !DerivedReturnTy->isPointerType()) &&
+      (!BaseReturnTy->isReferenceType() || 
!DerivedReturnTy->isReferenceType()))
----------------
It takes a non-trivial effort to understand the equivalence of the comment and 
the condition. I think, pulling the negations one level up would make the 
condition read easier:
```
if (!(BaseReturnTy->isPointerType() && DerivedReturnTy->isPointerType()) &&
    !(BaseReturnTy->isReferenceType() && DerivedReturnTy->isReferenceType()))
  return;
```
Also, please move the definitions of the variables `BTy`, `DTy`, `BRD`, `DRD` 
after this `if` and merge them with their initialization. 

================
Comment at: clang-tidy/misc/VirtualNearMissCheck.cpp:240
@@ -247,2 +239,3 @@
         unsigned EditDistance =
-            BaseMD->getName().edit_distance(DerivedMD->getName());
+            StringRef(BaseMD->getNameAsString())
+                .edit_distance(DerivedMD->getNameAsString());
----------------
xazax.hun wrote:
> congliu wrote:
> > NamedDecl::getName() directly returns a StringRef. Why using 
> > "getNameAsString()"? 
> Unfortunately getName will cause an assertion fail for methods that has a 
> non-identifier name, such as destructors and overloaded operators.
Should we maybe exclude operators and destructors from this check? A typo in 
destructor name won't compile. Do you have an example of a case where the check 
could be useful in detecting a typo in the name of an overloaded operator?

It would be nice to avoid using the (more expensive) `getNameAsString` here. 


http://reviews.llvm.org/D16179



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to