[clang] [WebKit checkers] Revert d08a2a4. It caused too many warnings. (PR #224479)
Ryosuke Niwa via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 17 22:01:10 PDT 2026
https://github.com/rniwa updated https://github.com/llvm/llvm-project/pull/224479
>From 6c2c06dda2da94176c2fbb0a79870e3a97120f00 Mon Sep 17 00:00:00 2001
From: Ryosuke Niwa <rniwa at webkit.org>
Date: Thu, 17 Sep 2026 15:39:00 -0700
Subject: [PATCH] Revert d08a2a4. It caused too many warnings.
---
.../Checkers/WebKit/ASTUtils.cpp | 2 --
.../WebKit/RawPtrRefCallArgsChecker.cpp | 3 ---
.../Checkers/WebKit/RawPtrRefSafetyModel.cpp | 6 +++++
.../Checkers/WebKit/objc-mock-types.h | 4 ----
.../WebKit/retain-ptr-ctor-adopt-use-arc.mm | 8 -------
.../WebKit/retain-ptr-ctor-adopt-use.mm | 11 ---------
.../Checkers/WebKit/unretained-call-args.mm | 23 -------------------
.../Checkers/WebKit/unretained-local-vars.mm | 3 ---
8 files changed, 6 insertions(+), 54 deletions(-)
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp
index 06eaa0673143f..6bb4f9051d4dc 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp
@@ -218,8 +218,6 @@ bool tryToFindPtrOrigin(
if (isSafePtrType(Method->getReturnType()))
return callback(E, true);
}
- if (ObjCMsgExpr->isClassMessage())
- return callback(E, true);
auto Selector = ObjCMsgExpr->getSelector();
auto NameForFirstSlot = Selector.getNameForSlot(0);
if ((NameForFirstSlot == "class" || NameForFirstSlot == "superclass") &&
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
index 4942e7125cd5c..7e5261723014a 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefCallArgsChecker.cpp
@@ -181,9 +181,6 @@ class RawPtrRefCallArgsChecker
if (IsUnsafe && *IsUnsafe && !isPtrOriginSafe(Receiver)) {
if (isAllocInit(E))
return;
- auto SelectorName = E->getSelector().getNameForSlot(0);
- if (SelectorName == "isEqual" || SelectorName == "isEqualToString")
- return;
reportBugOnReceiver(E->getMethodDecl(), Receiver, D);
}
}
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefSafetyModel.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefSafetyModel.cpp
index f0e375087fa81..0104cb295d7ef 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefSafetyModel.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefSafetyModel.cpp
@@ -9,7 +9,9 @@
#include "RawPtrRefSafetyModel.h"
#include "ASTUtils.h"
#include "clang/AST/Decl.h"
+#include "clang/AST/ExprObjC.h"
#include "clang/AST/Type.h"
+#include "clang/Analysis/DomainSpecific/CocoaConventions.h"
#include "clang/Basic/SourceManager.h"
using namespace clang;
@@ -78,6 +80,10 @@ class RetainPtrSafetyModel : public PtrRefSafetyModel {
bool isPtrType(const std::string &Name) const override {
return isRetainPtrOrOSPtr(Name);
}
+ bool isSafeExpr(const Expr *E) const override {
+ return ento::cocoa::isCocoaObjectRef(E->getType()) &&
+ isa<ObjCMessageExpr>(E);
+ }
bool isSafeDecl(const Decl *D, const SourceManager &SM) const override {
// Treat NS/CF globals in system header as immortal.
return SM.isInSystemHeader(D->getLocation());
diff --git a/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h b/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
index aad2a6185d0b0..63f6dd0960f81 100644
--- a/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
+++ b/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
@@ -174,8 +174,6 @@ __attribute__((objc_root_class))
- ( const char *)UTF8String;
- (id)initWithUTF8String:(const char *)nullTerminatedCString;
- (NSString *)copy;
-- (NSString *)mutableCopy;
-- (BOOL)isEqualToString:(NSString *)aString;
+ (id)stringWithUTF8String:(const char *)nullTerminatedCString;
@end
@@ -211,10 +209,8 @@ extern NSApplication * NSApp;
@end
@interface SomeObj : NSObject
-+ (SomeObj *)sharedInstance;
- (instancetype)_init;
- (SomeObj *)mutableCopy;
-- (BOOL)isEqual:(SomeObj *)other;
- (SomeObj *)copyWithValue:(int)value;
- (void)doWork;
- (SomeObj *)other;
diff --git a/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use-arc.mm b/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use-arc.mm
index 4f27bb6e41557..135fe651a9f16 100644
--- a/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use-arc.mm
+++ b/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use-arc.mm
@@ -51,10 +51,6 @@ @implementation SomeObj {
SomeObj *_other;
}
-+ (SomeObj *)sharedInstance {
- return nil;
-}
-
- (instancetype)_init {
self = [super init];
_number = nil;
@@ -71,10 +67,6 @@ - (SomeObj *)mutableCopy {
return copy;
}
-- (BOOL)isEqual:(SomeObj *)other {
- return self.value == other.value && self.next == other.next && _other == other.other;
-}
-
- (SomeObj *)copyWithValue:(int)value {
auto *copy = [[SomeObj alloc] init];
[copy setValue:_number];
diff --git a/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use.mm b/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use.mm
index d84f0c12a57d2..c337752d6bd21 100644
--- a/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use.mm
+++ b/clang/test/Analysis/Checkers/WebKit/retain-ptr-ctor-adopt-use.mm
@@ -16,7 +16,6 @@ void basic_correct() {
auto ns7 = retainPtr((SomeObj *)0);
auto ns8 = adoptNS(nil);
auto ns9 = adoptNSNullable([[SomeObj alloc] init]);
- auto ns10 = adoptNS([[SomeObj allocWithZone:nullptr] _init]);
CFMutableArrayRef cf1 = adoptCF(CFArrayCreateMutable(kCFAllocatorDefault, 10));
auto cf2 = adoptCF(SecTaskCreateFromSelf(kCFAllocatorDefault));
auto cf3 = adoptCF(checked_cf_cast<CFArrayRef>(CFCopyArray(cf1)));
@@ -33,8 +32,6 @@ void basic_wrong() {
// expected-warning at -1{{Incorrect use of adoptNS. The argument is +0 and results in an use-after-free [alpha.webkit.RetainPtrCtorAdoptChecker]}}
auto ns3 = adoptNSNullable([ns1.get() next]);
// expected-warning at -1{{Incorrect use of adoptNSNullable. The argument is +0 and results in an use-after-free [alpha.webkit.RetainPtrCtorAdoptChecker]}}
- RetainPtr<SomeObj> ns4 = [[SomeObj allocWithZone:nullptr] init];
- // expected-warning at -1{{Incorrect use of RetainPtr constructor. The argument is +1 and results in a memory leak [alpha.webkit.RetainPtrCtorAdoptChecker]}}
RetainPtr<CFMutableArrayRef> cf1 = CFArrayCreateMutable(kCFAllocatorDefault, 10);
// expected-warning at -1{{Incorrect use of RetainPtr constructor. The argument is +1 and results in a memory leak [alpha.webkit.RetainPtrCtorAdoptChecker]}}
RetainPtr<CFMutableArrayRef> cf2 = adoptCF(provide_cf());
@@ -59,10 +56,6 @@ @implementation SomeObj {
SomeObj *_other;
}
-+ (SomeObj *)sharedInstance {
- return nil;
-}
-
- (instancetype)_init {
self = [super init];
_number = nil;
@@ -80,10 +73,6 @@ - (SomeObj *)mutableCopy {
return copy;
}
-- (BOOL)isEqual:(SomeObj *)other {
- return self.value == other.value && self.next == other.next && _other == other.other;
-}
-
- (SomeObj *)copyWithValue:(int)value {
auto *copy = [[SomeObj alloc] init];
// expected-warning at -1{{The return value is +1 and results in a memory leak [alpha.webkit.RetainPtrCtorAdoptChecker]}}
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-call-args.mm b/clang/test/Analysis/Checkers/WebKit/unretained-call-args.mm
index e0e867d783bb1..b06c43dfbf8d4 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-call-args.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-call-args.mm
@@ -7,8 +7,6 @@
SomeObj *provide();
void consume_obj(SomeObj*);
-NSString *provide_str();
-
CFMutableArrayRef provide_cf();
void consume_cf(CFMutableArrayRef);
@@ -450,15 +448,6 @@ void foo() {
void foo() {
auto obj = adoptNS([[SomeObj alloc] init]);
[obj doWork];
- auto obj2 = adoptNS([[SomeObj alloc] _init]);
- [obj2 doWork];
- }
-
- void bar(NSZone *zone) {
- auto obj = adoptNS([[SomeObj allocWithZone:zone] init]);
- [obj doWork];
- auto obj2 = adoptNS([(SomeObj *)[SomeObj allocWithZone:zone] _init]);
- [obj2 doWork];
}
}
@@ -645,7 +634,6 @@ @interface TestObject : NSObject
- (void)doWork:(NSString *)msg, ...;
- (void)doWorkOnSelf;
- (SomeObj *)getSomeObj;
-+ (SomeObj *)sharedObj;
@end
@implementation TestObject
@@ -665,25 +653,14 @@ - (void)doWorkOnSelf {
[self doWork:nil];
[NSApp run];
adoptNS([allocObj() init]);
- [provide() isEqual:provide()];
- [provide_str() isEqualToString:@"foo"];
- [provide_str() copyWithZone:nullptr];
- [provide_str() mutableCopy];
}
- (SomeObj *)getSomeObj {
return RetainPtr<SomeObj *>(provide()).autorelease();
}
-+ (SomeObj *)sharedObj
-{
- return adoptNS([[SomeObj alloc] init]).autorelease();
-}
-
- (void)doWorkOnSomeObj {
[[self getSomeObj] doWork];
- // expected-warning at -1{{Receiver '[self getSomeObj]' (to '-[SomeObj doWork]') is a raw pointer to RetainPtr-capable type 'SomeObj'}}
- [[TestObject sharedObj] doWork];
}
- (CGImageRef)createImage {
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-local-vars.mm b/clang/test/Analysis/Checkers/WebKit/unretained-local-vars.mm
index 4e1ac86bd823d..03946b40ea816 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-local-vars.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-local-vars.mm
@@ -593,10 +593,7 @@ - (SomeObj*)getSomeObj {
- (void)storeSomeObj {
auto *obj = [self getSomeObj];
- // expected-warning at -1{{Local variable 'obj' is a raw pointer to RetainPtr-capable type 'SomeObj' [alpha.webkit.UnretainedLocalVarsChecker]}}
[obj doWork];
- auto *obj2 = [SomeObj sharedInstance];
- [obj2 doWork];
}
- (void)assignToGuardianArg:(RetainPtr<SomeObj>&)obj {
More information about the cfe-commits
mailing list