[clang] 820bab8 - [alpha.webkit.UncountedCallArgsChecker] Add the support for trivial CXXInheritedCtorInitExpr. (#111198)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 10 10:01:40 PDT 2024
Author: Ryosuke Niwa
Date: 2024-10-10T10:01:35-07:00
New Revision: 820bab8fb581f2fcd1a96b495f4762b02195d86a
URL: https://github.com/llvm/llvm-project/commit/820bab8fb581f2fcd1a96b495f4762b02195d86a
DIFF: https://github.com/llvm/llvm-project/commit/820bab8fb581f2fcd1a96b495f4762b02195d86a.diff
LOG: [alpha.webkit.UncountedCallArgsChecker] Add the support for trivial CXXInheritedCtorInitExpr. (#111198)
Added:
Modified:
clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
clang/test/Analysis/Checkers/WebKit/uncounted-obj-arg.cpp
Removed:
################################################################################
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
index 4d145be808f6d8..317642c5b9ca20 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
@@ -508,6 +508,10 @@ class TrivialFunctionAnalysisVisitor
return IsFunctionTrivial(CE->getConstructor());
}
+ bool VisitCXXInheritedCtorInitExpr(const CXXInheritedCtorInitExpr *E) {
+ return IsFunctionTrivial(E->getConstructor());
+ }
+
bool VisitCXXNewExpr(const CXXNewExpr *NE) { return VisitChildren(NE); }
bool VisitImplicitCastExpr(const ImplicitCastExpr *ICE) {
diff --git a/clang/test/Analysis/Checkers/WebKit/uncounted-obj-arg.cpp b/clang/test/Analysis/Checkers/WebKit/uncounted-obj-arg.cpp
index b6ab369f69a87d..1a42de90105a55 100644
--- a/clang/test/Analysis/Checkers/WebKit/uncounted-obj-arg.cpp
+++ b/clang/test/Analysis/Checkers/WebKit/uncounted-obj-arg.cpp
@@ -224,6 +224,20 @@ class ObjectWithMutatingDestructor {
Number n;
};
+class BaseType {
+public:
+ BaseType() : n(0) { }
+ BaseType(int v) : n(v) { }
+ BaseType(const char*);
+private:
+ Number n;
+};
+
+class SomeType : public BaseType {
+public:
+ using BaseType::BaseType;
+};
+
class RefCounted {
public:
void ref() const;
@@ -336,6 +350,8 @@ class RefCounted {
unsigned trivial60() { return ObjectWithNonTrivialDestructor { 5 }.value(); }
unsigned trivial61() { return DerivedNumber('7').value(); }
void trivial62() { WTFReportBacktrace(); }
+ SomeType trivial63() { return SomeType(0); }
+ SomeType trivial64() { return SomeType(); }
static RefCounted& singleton() {
static RefCounted s_RefCounted;
@@ -425,6 +441,7 @@ class RefCounted {
unsigned nonTrivial21() { return Number("123").value(); }
unsigned nonTrivial22() { return ComplexNumber(123, "456").real().value(); }
unsigned nonTrivial23() { return DerivedNumber("123").value(); }
+ SomeType nonTrivial24() { return SomeType("123"); }
static unsigned s_v;
unsigned v { 0 };
@@ -515,6 +532,8 @@ class UnrelatedClass {
getFieldTrivial().trivial60(); // no-warning
getFieldTrivial().trivial61(); // no-warning
getFieldTrivial().trivial62(); // no-warning
+ getFieldTrivial().trivial63(); // no-warning
+ getFieldTrivial().trivial64(); // no-warning
RefCounted::singleton().trivial18(); // no-warning
RefCounted::singleton().someFunction(); // no-warning
@@ -587,6 +606,8 @@ class UnrelatedClass {
// expected-warning at -1{{Call argument for 'this' parameter is uncounted and unsafe}}
getFieldTrivial().nonTrivial23();
// expected-warning at -1{{Call argument for 'this' parameter is uncounted and unsafe}}
+ getFieldTrivial().nonTrivial24();
+ // expected-warning at -1{{Call argument for 'this' parameter is uncounted and unsafe}}
}
void setField(RefCounted*);
More information about the cfe-commits
mailing list