From bad066202727c91d3c2b0fda32fe8592dd815aff Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa Date: Fri, 22 Aug 2025 14:36:50 -0700 Subject: [PATCH] [alpha.webkit.UncheckedCallArgsChecker] Don't emit a warning for passing a temporary object as an argument. Since a temporary object lives until the end of the statement, it's safe to pass such an object as a function argument without explicitly creating a CheckedRef/CheckedPtr in stack. --- clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp | 2 ++ clang/test/Analysis/Checkers/WebKit/unchecked-call-arg.cpp | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp index 478bd85177143..0d2294e1e9bb0 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp @@ -208,6 +208,8 @@ bool isASafeCallArg(const Expr *E) { return true; } } + if (isa(E)) + return true; // A temporary lives until the end of this statement. if (isConstOwnerPtrMemberExpr(E)) return true; diff --git a/clang/test/Analysis/Checkers/WebKit/unchecked-call-arg.cpp b/clang/test/Analysis/Checkers/WebKit/unchecked-call-arg.cpp index 8685978ebf1ac..b89a3246606ed 100644 --- a/clang/test/Analysis/Checkers/WebKit/unchecked-call-arg.cpp +++ b/clang/test/Analysis/Checkers/WebKit/unchecked-call-arg.cpp @@ -32,3 +32,8 @@ void foo() { provide()->doWork(); // expected-warning@-1{{Call argument for 'this' parameter is unchecked and unsafe}} } + +void doWorkWithObject(const CheckedObject&); +void bar() { + doWorkWithObject(CheckedObject()); +}