Skip to content

Commit 55c79fe

Browse files
rniwafrederik-h
authored andcommitted
[alpha.webkit.UncountedCallArgsChecker] Treat an explicit construction of Ref from a Ref return value safe. (llvm#130911)
Fix a bug that an explicit construction of Ref out of a Ref return value would not be treated as safe. It is definitely safe albit redundant.
1 parent 1d47feb commit 55c79fe

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,8 @@ bool tryToFindPtrOrigin(
8484
if (isCtorOfSafePtr(ConversionFunc))
8585
return callback(E, true);
8686
}
87+
if (isa<CXXFunctionalCastExpr>(E) && isSafePtrType(cast->getType()))
88+
return callback(E, true);
8789
}
8890
// FIXME: This can give false "origin" that would lead to false negatives
8991
// in checkers. See https://reviews.llvm.org/D37023 for reference.

clang/test/Analysis/Checkers/WebKit/call-args.cpp

+11
Original file line numberDiff line numberDiff line change
@@ -407,6 +407,17 @@ namespace call_with_explicit_temporary_obj {
407407
void baz() {
408408
bar<int>();
409409
}
410+
411+
class Foo {
412+
Ref<RefCountable> ensure();
413+
void foo() {
414+
Ref { ensure() }->method();
415+
}
416+
};
417+
418+
void baz(Ref<RefCountable>&& arg) {
419+
Ref { arg }->method();
420+
}
410421
}
411422

412423
namespace call_with_explicit_construct {

0 commit comments

Comments
 (0)