[clang] [alpha.webkit.UnretainedLocalVarsChecker] Add a checker for local variables to NS and CF types. (PR #127554)
via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 17 18:28:45 PST 2025
github-actions[bot] wrote:
<!--LLVM CODE FORMAT COMMENT: {clang-format}-->
:warning: C/C++ code formatter, clang-format found issues in your code. :warning:
<details>
<summary>
You can test this locally with the following command:
</summary>
``````````bash
git-clang-format --diff b5b8a59a530b69f02bfc98b1ab8758e1757ddb8f d6c4e1a23dc0cc6850c5cfdceecc2e1be8943592 --extensions cpp,h -- clang/test/Analysis/Checkers/WebKit/objc-mock-types.h clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.h clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLambdaCapturesChecker.cpp
``````````
</details>
<details>
<summary>
View the diff from clang-format here.
</summary>
``````````diff
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
index 6acd5215ae..810fe49355 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
@@ -118,9 +118,7 @@ bool isRefType(const std::string &Name) {
Name == "RefPtr" || Name == "RefPtrAllowingPartiallyDestroyed";
}
-bool isRetainPtr(const std::string &Name) {
- return Name == "RetainPtr";
-}
+bool isRetainPtr(const std::string &Name) { return Name == "RetainPtr"; }
bool isCheckedPtr(const std::string &Name) {
return Name == "CheckedPtr" || Name == "CheckedRef";
@@ -152,8 +150,7 @@ bool isCtorOfRetainPtr(const clang::FunctionDecl *F) {
}
bool isCtorOfSafePtr(const clang::FunctionDecl *F) {
- return isCtorOfRefCounted(F) || isCtorOfCheckedPtr(F) ||
- isCtorOfRetainPtr(F);
+ return isCtorOfRefCounted(F) || isCtorOfCheckedPtr(F) || isCtorOfRetainPtr(F);
}
template <typename Predicate>
@@ -181,8 +178,7 @@ bool isRefOrCheckedPtrType(const clang::QualType T) {
}
bool isRetainPtrType(const clang::QualType T) {
- return isPtrOfType(
- T, [](auto Name) { return Name == "RetainPtr"; });
+ return isPtrOfType(T, [](auto Name) { return Name == "RetainPtr"; });
}
bool isOwnerPtrType(const clang::QualType T) {
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
index af236f404e..d633fbcbd7 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
@@ -142,31 +142,28 @@ public:
}
bool isPtrOriginSafe(const Expr *Arg) const {
- return tryToFindPtrOrigin(Arg, /*StopAtFirstRefCountedObj=*/true,
- [&](const clang::CXXRecordDecl *Record) {
- return isSafePtr(Record);
- },
- [&](const clang::QualType T) {
- return isSafePtrType(T);
- },
- [&](const clang::Expr *ArgOrigin, bool IsSafe) {
- if (IsSafe)
- return true;
- if (isa<CXXNullPtrLiteralExpr>(ArgOrigin)) {
- // foo(nullptr)
- return true;
- }
- if (isa<IntegerLiteral>(ArgOrigin)) {
- // FIXME: Check the value.
- // foo(NULL)
- return true;
- }
- if (isASafeCallArg(ArgOrigin))
- return true;
- if (EFA.isACallToEnsureFn(ArgOrigin))
- return true;
- return false;
- });
+ return tryToFindPtrOrigin(
+ Arg, /*StopAtFirstRefCountedObj=*/true,
+ [&](const clang::CXXRecordDecl *Record) { return isSafePtr(Record); },
+ [&](const clang::QualType T) { return isSafePtrType(T); },
+ [&](const clang::Expr *ArgOrigin, bool IsSafe) {
+ if (IsSafe)
+ return true;
+ if (isa<CXXNullPtrLiteralExpr>(ArgOrigin)) {
+ // foo(nullptr)
+ return true;
+ }
+ if (isa<IntegerLiteral>(ArgOrigin)) {
+ // FIXME: Check the value.
+ // foo(NULL)
+ return true;
+ }
+ if (isASafeCallArg(ArgOrigin))
+ return true;
+ if (EFA.isACallToEnsureFn(ArgOrigin))
+ return true;
+ return false;
+ });
}
bool shouldSkipCall(const CallExpr *CE) const {
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
index f7eacdd6b5..d0a8282479 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefLocalVarsChecker.cpp
@@ -14,8 +14,8 @@
#include "clang/AST/DeclCXX.h"
#include "clang/AST/DynamicRecursiveASTVisitor.h"
#include "clang/AST/ParentMapContext.h"
-#include "clang/Basic/SourceLocation.h"
#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
+#include "clang/Basic/SourceLocation.h"
#include "clang/StaticAnalyzer/Checkers/BuiltinCheckerRegistration.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugReporter.h"
#include "clang/StaticAnalyzer/Core/BugReporter/BugType.h"
@@ -269,9 +269,7 @@ public:
[&](const clang::CXXRecordDecl *Record) {
return isSafePtr(Record);
},
- [&](const clang::QualType Type) {
- return isSafePtrType(Type);
- },
+ [&](const clang::QualType Type) { return isSafePtrType(Type); },
[&](const clang::Expr *InitArgOrigin, bool IsSafe) {
if (!InitArgOrigin || IsSafe)
return true;
@@ -401,6 +399,7 @@ public:
class UnretainedLocalVarsChecker final : public RawPtrRefLocalVarsChecker {
mutable bool IsARCEnabled{false};
+
public:
UnretainedLocalVarsChecker()
: RawPtrRefLocalVarsChecker("Unretained raw pointer or reference not "
@@ -416,8 +415,8 @@ public:
}
const char *ptrKind() const final { return "unretained"; }
- void checkASTDecl(const TranslationUnitDecl *TUD,
- AnalysisManager &MGR, BugReporter &BRArg) const final {
+ void checkASTDecl(const TranslationUnitDecl *TUD, AnalysisManager &MGR,
+ BugReporter &BRArg) const final {
IsARCEnabled = TUD->getLangOpts().ObjCAutoRefCount;
RawPtrRefLocalVarsChecker::checkASTDecl(TUD, MGR, BRArg);
}
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLambdaCapturesChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLambdaCapturesChecker.cpp
index fd710177e5..506442f352 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLambdaCapturesChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/UncountedLambdaCapturesChecker.cpp
@@ -61,7 +61,8 @@ public:
}
bool shouldCheckThis() {
- auto result = !ClsType.isNull() ? isUnsafePtr(ClsType, false) : std::nullopt;
+ auto result =
+ !ClsType.isNull() ? isUnsafePtr(ClsType, false) : std::nullopt;
return result && *result;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/127554
More information about the cfe-commits
mailing list