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 <[email protected]> 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@-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..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@-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@-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 { _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
