@@ -38,7 +38,7 @@ class RawPtrRefMemberChecker
38
38
RawPtrRefMemberChecker (const char *description)
39
39
: Bug(this , description, " WebKit coding guidelines" ) {}
40
40
41
- virtual std::optional<bool > isUnsafePtr (QualType) const = 0;
41
+ virtual std::optional<bool > isUnsafePtr (QualType, bool ignoreARC = false ) const = 0;
42
42
virtual const char *typeName () const = 0;
43
43
virtual const char *invariant () const = 0;
44
44
@@ -175,11 +175,13 @@ class RawPtrRefMemberChecker
175
175
return ;
176
176
177
177
if (const ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CD)) {
178
- if (!RTC || !RTC->defaultSynthProperties () || ID->isObjCRequiresPropertyDefs ())
178
+ if (!RTC || !RTC->defaultSynthProperties () ||
179
+ ID->isObjCRequiresPropertyDefs ())
179
180
return ;
180
181
}
181
182
182
- auto IsUnsafePtr = isUnsafePtr (QT);
183
+ bool ignoreARC = !PD->isReadOnly () && PD->getSetterKind () == ObjCPropertyDecl::Assign;
184
+ auto IsUnsafePtr = isUnsafePtr (QT, ignoreARC);
183
185
if (!IsUnsafePtr || !*IsUnsafePtr)
184
186
return ;
185
187
@@ -279,7 +281,7 @@ class NoUncountedMemberChecker final : public RawPtrRefMemberChecker {
279
281
: RawPtrRefMemberChecker(" Member variable is a raw-pointer/reference to "
280
282
" reference-countable type" ) {}
281
283
282
- std::optional<bool > isUnsafePtr (QualType QT) const final {
284
+ std::optional<bool > isUnsafePtr (QualType QT, bool ) const final {
283
285
return isUncountedPtr (QT.getCanonicalType ());
284
286
}
285
287
@@ -296,7 +298,7 @@ class NoUncheckedPtrMemberChecker final : public RawPtrRefMemberChecker {
296
298
: RawPtrRefMemberChecker(" Member variable is a raw-pointer/reference to "
297
299
" checked-pointer capable type" ) {}
298
300
299
- std::optional<bool > isUnsafePtr (QualType QT) const final {
301
+ std::optional<bool > isUnsafePtr (QualType QT, bool ) const final {
300
302
return isUncheckedPtr (QT.getCanonicalType ());
301
303
}
302
304
@@ -316,8 +318,8 @@ class NoUnretainedMemberChecker final : public RawPtrRefMemberChecker {
316
318
RTC = RetainTypeChecker ();
317
319
}
318
320
319
- std::optional<bool > isUnsafePtr (QualType QT) const final {
320
- return RTC->isUnretained (QT);
321
+ std::optional<bool > isUnsafePtr (QualType QT, bool ignoreARC ) const final {
322
+ return RTC->isUnretained (QT, ignoreARC );
321
323
}
322
324
323
325
const char *typeName () const final { return " retainable type" ; }
0 commit comments