https://github.com/rniwa updated https://github.com/llvm/llvm-project/pull/224463
>From fdeb9c468f539cc279b69ae62710c9abd7c597e6 Mon Sep 17 00:00:00 2001 From: Ryosuke Niwa <[email protected]> Date: Thu, 17 Sep 2026 15:39:00 -0700 Subject: [PATCH] [WebKit checkers] Revert bf1d278. It caused too many warnings. --- .../lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp | 2 -- .../Checkers/WebKit/RawPtrRefCallArgsChecker.cpp | 3 --- .../Checkers/WebKit/RawPtrRefSafetyModel.cpp | 6 ++++++ .../test/Analysis/Checkers/WebKit/objc-mock-types.h | 4 ---- .../Checkers/WebKit/retain-ptr-ctor-adopt-use-arc.mm | 8 -------- .../Checkers/WebKit/retain-ptr-ctor-adopt-use.mm | 11 ----------- .../Analysis/Checkers/WebKit/unretained-call-args.mm | 12 ------------ 7 files changed, 6 insertions(+), 40 deletions(-) diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp index e8f69f1aac757..d2d37e780b7f7 100644 --- a/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp +++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/ASTUtils.cpp @@ -214,8 +214,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@-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@-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@-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@-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@-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..45174fc94878a 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 _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
