From 98ac257f8537f883f94688957d23b85ea6bca5d1 Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa Date: Mon, 9 Dec 2024 23:34:58 -0800 Subject: [PATCH] UncountedLocalVarsChecker and UncheckedLocalVarsChecker should recognize signletons. It's safe to have a raw pointer or a raw reference to a singleton object. Explicitly allow this in UncountedLocalVarsChecker and UncheckedLocalVarsChecker. --- .../Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp | 2 +- .../Analysis/Checkers/WebKit/uncounted-local-vars.cpp | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp index e0433c5c2c1a0..bb580b06e2c53 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(InitArgOrigin)) diff --git a/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp b/clang/test/Analysis/Checkers/WebKit/uncounted-local-vars.cpp index d7fb689557a6f..52854cd10f68c 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