[clang] [WebKit Checkers] Trivial analysis should check destructors of function parameters and local variables (PR #181576)

Ryosuke Niwa via cfe-commits cfe-commits at lists.llvm.org
Mon Feb 16 12:54:23 PST 2026


================
@@ -542,6 +546,49 @@ class TrivialFunctionAnalysisVisitor
     });
   }
 
+  bool HasTrivialDestructor(const VarDecl *VD) {
+    return WithCachedResult(VD, [&]() {
+      auto QT = VD->getType();
+      if (QT.isPODType(VD->getASTContext()))
+        return true;
+      auto *Type = QT.getTypePtrOrNull();
+      if (!Type)
+        return false;
+      const CXXRecordDecl *R = Type->getAsCXXRecordDecl();
+      if (!R) {
+        if (isa<LValueReferenceType>(Type))
+          return true; // T& does not run its destructor.
+        if (auto *RT = dyn_cast<RValueReferenceType>(Type)) {
+          // For T&&, we evaluate the destructor of T.
+          QT = RT->getPointeeType();
+          Type = QT.getTypePtrOrNull();
+          if (!Type)
+            return false;
+          R = Type->getAsCXXRecordDecl();
+        }
+      }
+      if (!R) {
+        if (auto *AT = dyn_cast<ConstantArrayType>(Type)) {
+          QT = AT->getElementType();
+          Type = QT.getTypePtrOrNull();
----------------
rniwa wrote:

Fixed!

https://github.com/llvm/llvm-project/pull/181576


More information about the cfe-commits mailing list