llvmorg-github-actions[bot] wrote:

<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang-static-analyzer-1

@llvm/pr-subscribers-clang

Author: Adam Dangoor (adamtheturtle)

<details>
<summary>Changes</summary>

The destructor exemption pretty-prints an instantiated base type before 
checking whether its namespace is WTF. Deep repeated template arguments make 
that printing exponential even for unrelated classes. Check the namespace 
first, preserving the same exemption condition.

Add a reduced analyzer regression with no standard-library dependency.

Fixes #<!-- -->235705.

Validation on macOS arm64 with assertions enabled, built independently against 
LLVM main `0a6c7b28e6a5ad99b4d564908a6dd0912f944328`:

- `clang`, `clang-tidy`, `clang-format`, and `FileCheck` build passed.
- Formatting checked with the compiler build's clang-format.
- webkit: 82 upstream lit tests passed.

The original Linux AArch64 LLVM 23.1.4 measurements are in the linked issue. 
Those are single wall-clock samples, not statistical benchmarks.

Prepared with AI assistance (OpenAI Codex).


---
Full diff: https://github.com/llvm/llvm-project/pull/235713.diff


2 Files Affected:

- (modified) 
clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp 
(+2-2) 
- (added) 
clang/test/Analysis/Checkers/WebKit/ref-cntbl-base-virtual-dtor-deep-types.cpp 
(+7) 


``````````diff
diff --git 
a/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp 
b/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp
index b883cb78705b6b..1859536cae6d69 100644
--- 
a/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp
+++ 
b/clang/lib/StaticAnalyzer/Checkers/WebKit/RefCntblBaseVirtualDtorChecker.cpp
@@ -199,8 +199,8 @@ class RefCntblBaseVirtualDtorChecker
           if (!C)
             continue;
 
-          bool isExempt = T.getAsString() == "NoVirtualDestructorBase" &&
-                          safeGetName(C->getParent()) == "WTF";
+          bool isExempt = safeGetName(C->getParent()) == "WTF" &&
+                          T.getAsString() == "NoVirtualDestructorBase";
           if (isExempt || ExemptDecls.contains(C)) {
             ExemptDecls.insert(RD);
             continue;
diff --git 
a/clang/test/Analysis/Checkers/WebKit/ref-cntbl-base-virtual-dtor-deep-types.cpp
 
b/clang/test/Analysis/Checkers/WebKit/ref-cntbl-base-virtual-dtor-deep-types.cpp
new file mode 100644
index 00000000000000..aed8871ab793eb
--- /dev/null
+++ 
b/clang/test/Analysis/Checkers/WebKit/ref-cntbl-base-virtual-dtor-deep-types.cpp
@@ -0,0 +1,7 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=webkit.RefCntblBaseVirtualDtor 
-std=c++17 -verify %s
+// expected-no-diagnostics
+
+template<class T> struct Alloc {};
+template<class T, class A> struct Storage {};
+template<class T, class A=Alloc<T>> struct Node : Storage<T,A> {};
+struct Derived : 
Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<Node<int>>>>>>>>>>>>>>>>>>>>>>>>>>>>
 {};

``````````

</details>


https://github.com/llvm/llvm-project/pull/235713
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to