[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 14:35:09 PST 2026


================
@@ -516,19 +516,35 @@ class TrivialFunctionAnalysisVisitor
     return Result;
   }
 
+  bool CanTriviallyDestruct(const Type *T) {
+    if (T->isIntegralOrEnumerationType())
+      return true;
+    if (isa<PointerType>(T) || T->isNullPtrType())
+      return true;
+    auto *R = T->getAsCXXRecordDecl();
+    if (!R)
+      return false;
+    auto *Dtor = R->getDestructor();
+    return !Dtor || Dtor->isTrivial() || IsFunctionTrivial(Dtor);
+  }
+
 public:
   using CacheTy = TrivialFunctionAnalysis::CacheTy;
 
   TrivialFunctionAnalysisVisitor(CacheTy &Cache) : Cache(Cache) {}
 
   bool IsFunctionTrivial(const Decl *D) {
-    if (auto *FnDecl = dyn_cast<FunctionDecl>(D)) {
-      if (isNoDeleteFunction(FnDecl))
-        return true;
-      if (FnDecl->isVirtualAsWritten())
-        return false;
-    }
     return WithCachedResult(D, [&]() {
+      if (auto *FnDecl = dyn_cast<FunctionDecl>(D)) {
+        if (isNoDeleteFunction(FnDecl))
+          return true;
+        if (FnDecl->isVirtualAsWritten())
----------------
rniwa wrote:

Oh, nice, this is very handy.

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


More information about the cfe-commits mailing list