[clang] 377d1f0 - UncountedLocalVarsChecker and UncheckedLocalVarsChecker should recognize signletons. (#119339)

via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 10 15:58:02 PST 2024


Author: Ryosuke Niwa
Date: 2024-12-10T15:57:58-08:00
New Revision: 377d1f0a6b862183b25701cc765fca7f84ea8e32

URL: https://github.com/llvm/llvm-project/commit/377d1f0a6b862183b25701cc765fca7f84ea8e32
DIFF: https://github.com/llvm/llvm-project/commit/377d1f0a6b862183b25701cc765fca7f84ea8e32.diff

LOG: UncountedLocalVarsChecker and UncheckedLocalVarsChecker should recognize signletons. (#119339)

It's safe to have a raw pointer or a raw reference to a singleton
object. Explicitly allow this in UncountedLocalVarsChecker and
UncheckedLocalVarsChecker.

Added: 
    

Modified: 
    clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
    clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp

Removed: 
    


################################################################################
diff  --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
index e0433c5c2c1a09..bb580b06e2c53f 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
@@ -263,7 +263,7 @@ class RawPtrRefLocalVarsChecker
       if (tryToFindPtrOrigin(
               Value, /*StopAtFirstRefCountedObj=*/false,
               [&](const clang::Expr *InitArgOrigin, bool IsSafe) {
-                if (!InitArgOrigin)
+                if (!InitArgOrigin || IsSafe)
                   return true;
 
                 if (isa<CXXThisExpr>(InitArgOrigin))

diff  --git a/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp b/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp
index d7fb689557a6fc..52854cd10f68c7 100644
--- a/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp
+++ b/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp
@@ -456,3 +456,12 @@ int TreeNode::recursiveWeight() {
 }
 
 } // namespace local_var_in_recursive_function
+
+namespace local_var_for_singleton {
+  RefCountable *singleton();
+  RefCountable *otherSingleton();
+  void foo() {
+    RefCountable* bar = singleton();
+    RefCountable* baz = otherSingleton();
+  }
+}
\ No newline at end of file


        


More information about the cfe-commits mailing list