[clang] b7e256d - [alpha.webkit.NoUnretainedMemberChecker] Allow a retaining property synthesis (#162576)
via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 9 14:28:15 PDT 2025
Author: Ryosuke Niwa
Date: 2025-10-09T14:28:11-07:00
New Revision: b7e256dce9b86ff35e38c4d0bf590969f689a8c5
URL: https://github.com/llvm/llvm-project/commit/b7e256dce9b86ff35e38c4d0bf590969f689a8c5
DIFF: https://github.com/llvm/llvm-project/commit/b7e256dce9b86ff35e38c4d0bf590969f689a8c5.diff
LOG: [alpha.webkit.NoUnretainedMemberChecker] Allow a retaining property synthesis (#162576)
Don't emit a warning when an Objective-C property is defined using copy
or strong semantics.
Added:
Modified:
clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
clang/test/Analysis/Checkers/WebKit/unretained-members.mm
Removed:
################################################################################
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
index 15a0c5a7fd9dc..ace639ce7ab18 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
@@ -232,7 +232,7 @@ class RawPtrRefMemberChecker
bool ignoreARC =
!PD->isReadOnly() && PD->getSetterKind() == ObjCPropertyDecl::Assign;
auto IsUnsafePtr = isUnsafePtr(QT, ignoreARC);
- return {IsUnsafePtr && *IsUnsafePtr, PropType};
+ return {IsUnsafePtr && *IsUnsafePtr && !PD->isRetaining(), PropType};
}
bool shouldSkipDecl(const RecordDecl *RD) const {
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
index adf1d8aef9d7d..2b120b9b1385c 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
@@ -113,7 +113,6 @@ @interface AnotherObject : NSObject {
// expected-warning at -1{{Instance variable 'dispatch' in 'AnotherObject' is a retainable type 'dispatch_queue_t'}}
}
@property(nonatomic, readonly, strong) NSString *prop_string;
-// expected-warning at -1{{Property 'prop_string' in 'AnotherObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
@property(nonatomic, readonly) NSString *prop_safe;
@end
@@ -132,7 +131,6 @@ @interface DerivedObject : AnotherObject {
// expected-warning at -1{{Instance variable 'os_dispatch' in 'DerivedObject' is a retainable type 'dispatch_queue_t'}}
}
@property(nonatomic, strong) NSNumber *prop_number;
-// expected-warning at -1{{Property 'prop_number' in 'DerivedObject' is a raw pointer to retainable type 'NSNumber'; member variables must be a RetainPtr}}
@property(nonatomic, readonly) NSString *prop_string;
@end
@@ -178,12 +176,12 @@ @interface NoSynthObject : NSObject {
}
@property(nonatomic, readonly, strong) NSString *prop_string1;
@property(nonatomic, readonly, strong) NSString *prop_string2;
-// expected-warning at -1{{Property 'prop_string2' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'}}
@property(nonatomic, assign) NSString *prop_string3;
// expected-warning at -1{{Property 'prop_string3' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
@property(nonatomic, unsafe_unretained) NSString *prop_string4;
// expected-warning at -1{{Property 'prop_string4' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
- at property(nonatomic, readonly, strong) NSString *dispatch;
+ at property(nonatomic, copy) NSString *prop_string5;
+ at property(nonatomic, readonly, strong) dispatch_queue_t dispatch;
@end
@implementation NoSynthObject
@@ -193,6 +191,7 @@ - (NSString *)prop_string1 {
@synthesize prop_string2;
@synthesize prop_string3;
@synthesize prop_string4;
+ at synthesize prop_string5;
- (dispatch_queue_t)dispatch {
return nil;
}
More information about the cfe-commits
mailing list