[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