[PATCH] D16179: [clang-tidy] Handle decayed types and other improvements in VirtualNearMiss check.

Alexander Kornienko via cfe-commits cfe-commits at lists.llvm.org
Thu Jan 14 04:58:40 PST 2016


alexfh added a comment.

> ... What about a configuration option to also report near misses when only a qualifier is missing?


Might be a useful thing. We should first check if it makes sense to always ignore a qualifier.


================
Comment at: clang-tidy/misc/VirtualNearMissCheck.cpp:55
@@ -54,11 +54,3 @@
   // 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();
-    }
+  if ((BaseReturnTy->isPointerType() && DerivedReturnTy->isPointerType()) ||
+      (BaseReturnTy->isReferenceType() && DerivedReturnTy->isReferenceType())) {
----------------
Interesting, didn't know about `Type::getPointeeType()`. I'd better return, if the condition is not met. The next `if` would be not needed then and the variable definitions above could be moved after this `if`.

================
Comment at: clang-tidy/misc/VirtualNearMissCheck.cpp:129
@@ -127,3 +128,3 @@
   for (unsigned I = 0; I < NumParamA; I++) {
-    if (BaseMD->getParamDecl(I)->getType() !=
-        DerivedMD->getParamDecl(I)->getType())
+    if (getDecayedType(BaseMD->getParamDecl(I)->getType()) !=
+        getDecayedType(DerivedMD->getParamDecl(I)->getType()))
----------------
We should check whether this creates any false positives.


http://reviews.llvm.org/D16179





More information about the cfe-commits mailing list