[llvm-branch-commits] [clang] 28174b6 - Revert "[alpha.webkit.NoUnretainedMemberChecker] Recognize NS_REQUIRES_PROPER…"
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Mon Jun 9 20:55:57 PDT 2025
Author: Ryosuke Niwa
Date: 2025-06-09T20:55:54-07:00
New Revision: 28174b68fd035a5d62b68c48cc07b5334e2c3ab9
URL: https://github.com/llvm/llvm-project/commit/28174b68fd035a5d62b68c48cc07b5334e2c3ab9
DIFF: https://github.com/llvm/llvm-project/commit/28174b68fd035a5d62b68c48cc07b5334e2c3ab9.diff
LOG: Revert "[alpha.webkit.NoUnretainedMemberChecker] Recognize NS_REQUIRES_PROPER…"
This reverts commit 0123ee51ef3290466c6d743aac2932b23655aa04.
Added:
Modified:
clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
clang/test/Analysis/Checkers/WebKit/unretained-members-arc.mm
clang/test/Analysis/Checkers/WebKit/unretained-members.mm
Removed:
################################################################################
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
index 72199af2f80a5..cd33476344a34 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
@@ -236,7 +236,6 @@ std::optional<bool> isUnchecked(const QualType T) {
void RetainTypeChecker::visitTranslationUnitDecl(
const TranslationUnitDecl *TUD) {
IsARCEnabled = TUD->getLangOpts().ObjCAutoRefCount;
- DefaultSynthProperties = TUD->getLangOpts().ObjCDefaultSynthProperties;
}
void RetainTypeChecker::visitTypedef(const TypedefDecl *TD) {
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
index 3c9560cb8059b..f9fcfe9878d54 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
@@ -76,14 +76,12 @@ class RetainTypeChecker {
llvm::DenseSet<const RecordType *> CFPointees;
llvm::DenseSet<const Type *> RecordlessTypes;
bool IsARCEnabled{false};
- bool DefaultSynthProperties{true};
public:
void visitTranslationUnitDecl(const TranslationUnitDecl *);
void visitTypedef(const TypedefDecl *);
bool isUnretained(const QualType, bool ignoreARC = false);
bool isARCEnabled() const { return IsARCEnabled; }
- bool defaultSynthProperties() const { return DefaultSynthProperties; }
};
/// \returns true if \p Class is NS or CF objects AND not retained, false if
diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
index 8faf6a219450a..b1350b9093021 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
@@ -28,7 +28,6 @@ class RawPtrRefMemberChecker
private:
BugType Bug;
mutable BugReporter *BR;
- mutable llvm::DenseSet<const ObjCIvarDecl *> IvarDeclsToIgnore;
protected:
mutable std::optional<RetainTypeChecker> RTC;
@@ -37,8 +36,7 @@ class RawPtrRefMemberChecker
RawPtrRefMemberChecker(const char *description)
: Bug(this, description, "WebKit coding guidelines") {}
- virtual std::optional<bool> isUnsafePtr(QualType,
- bool ignoreARC = false) const = 0;
+ virtual std::optional<bool> isUnsafePtr(QualType) const = 0;
virtual const char *typeName() const = 0;
virtual const char *invariant() const = 0;
@@ -140,8 +138,6 @@ class RawPtrRefMemberChecker
return;
}
if (auto *ID = dyn_cast<ObjCImplementationDecl>(CD)) {
- for (auto *PropImpl : ID->property_impls())
- visitPropImpl(CD, PropImpl);
for (auto *Ivar : ID->ivars())
visitIvarDecl(CD, Ivar);
return;
@@ -152,10 +148,6 @@ class RawPtrRefMemberChecker
const ObjCIvarDecl *Ivar) const {
if (BR->getSourceManager().isInSystemHeader(Ivar->getLocation()))
return;
-
- if (IvarDeclsToIgnore.contains(Ivar))
- return;
-
auto QT = Ivar->getType();
const Type *IvarType = QT.getTypePtrOrNull();
if (!IvarType)
@@ -165,8 +157,6 @@ class RawPtrRefMemberChecker
if (!IsUnsafePtr || !*IsUnsafePtr)
return;
- IvarDeclsToIgnore.insert(Ivar);
-
if (auto *MemberCXXRD = IvarType->getPointeeCXXRecordDecl())
reportBug(Ivar, IvarType, MemberCXXRD, CD);
else if (auto *ObjCDecl = getObjCDecl(IvarType))
@@ -177,15 +167,13 @@ class RawPtrRefMemberChecker
const ObjCPropertyDecl *PD) const {
if (BR->getSourceManager().isInSystemHeader(PD->getLocation()))
return;
+ auto QT = PD->getType();
+ const Type *PropType = QT.getTypePtrOrNull();
+ if (!PropType)
+ return;
- if (const ObjCInterfaceDecl *ID = dyn_cast<ObjCInterfaceDecl>(CD)) {
- if (!RTC || !RTC->defaultSynthProperties() ||
- ID->isObjCRequiresPropertyDefs())
- return;
- }
-
- auto [IsUnsafe, PropType] = isPropImplUnsafePtr(PD);
- if (!IsUnsafe)
+ auto IsUnsafePtr = isUnsafePtr(QT);
+ if (!IsUnsafePtr || !*IsUnsafePtr)
return;
if (auto *MemberCXXRD = PropType->getPointeeCXXRecordDecl())
@@ -194,47 +182,6 @@ class RawPtrRefMemberChecker
reportBug(PD, PropType, ObjCDecl, CD);
}
- void visitPropImpl(const ObjCContainerDecl *CD,
- const ObjCPropertyImplDecl *PID) const {
- if (BR->getSourceManager().isInSystemHeader(PID->getLocation()))
- return;
-
- if (PID->getPropertyImplementation() != ObjCPropertyImplDecl::Synthesize)
- return;
-
- auto *PropDecl = PID->getPropertyDecl();
- if (auto *IvarDecl = PID->getPropertyIvarDecl()) {
- if (IvarDeclsToIgnore.contains(IvarDecl))
- return;
- IvarDeclsToIgnore.insert(IvarDecl);
- }
- auto [IsUnsafe, PropType] = isPropImplUnsafePtr(PropDecl);
- if (!IsUnsafe)
- return;
-
- if (auto *MemberCXXRD = PropType->getPointeeCXXRecordDecl())
- reportBug(PropDecl, PropType, MemberCXXRD, CD);
- else if (auto *ObjCDecl = getObjCDecl(PropType))
- reportBug(PropDecl, PropType, ObjCDecl, CD);
- }
-
- std::pair<bool, const Type *>
- isPropImplUnsafePtr(const ObjCPropertyDecl *PD) const {
- if (!PD)
- return {false, nullptr};
-
- auto QT = PD->getType();
- const Type *PropType = QT.getTypePtrOrNull();
- if (!PropType)
- return {false, nullptr};
-
- // "assign" property doesn't retain even under ARC so treat it as unsafe.
- bool ignoreARC =
- !PD->isReadOnly() && PD->getSetterKind() == ObjCPropertyDecl::Assign;
- auto IsUnsafePtr = isUnsafePtr(QT, ignoreARC);
- return {IsUnsafePtr && *IsUnsafePtr, PropType};
- }
-
bool shouldSkipDecl(const RecordDecl *RD) const {
if (!RD->isThisDeclarationADefinition())
return true;
@@ -325,7 +272,7 @@ class NoUncountedMemberChecker final : public RawPtrRefMemberChecker {
: RawPtrRefMemberChecker("Member variable is a raw-pointer/reference to "
"reference-countable type") {}
- std::optional<bool> isUnsafePtr(QualType QT, bool) const final {
+ std::optional<bool> isUnsafePtr(QualType QT) const final {
return isUncountedPtr(QT.getCanonicalType());
}
@@ -342,7 +289,7 @@ class NoUncheckedPtrMemberChecker final : public RawPtrRefMemberChecker {
: RawPtrRefMemberChecker("Member variable is a raw-pointer/reference to "
"checked-pointer capable type") {}
- std::optional<bool> isUnsafePtr(QualType QT, bool) const final {
+ std::optional<bool> isUnsafePtr(QualType QT) const final {
return isUncheckedPtr(QT.getCanonicalType());
}
@@ -362,8 +309,8 @@ class NoUnretainedMemberChecker final : public RawPtrRefMemberChecker {
RTC = RetainTypeChecker();
}
- std::optional<bool> isUnsafePtr(QualType QT, bool ignoreARC) const final {
- return RTC->isUnretained(QT, ignoreARC);
+ std::optional<bool> isUnsafePtr(QualType QT) const final {
+ return RTC->isUnretained(QT);
}
const char *typeName() const final { return "retainable type"; }
diff --git a/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h b/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
index 9e4356a71f1b5..93e7dfd77b9e9 100644
--- a/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
+++ b/clang/test/Analysis/Checkers/WebKit/objc-mock-types.h
@@ -22,7 +22,6 @@ typedef struct CF_BRIDGED_TYPE(id) CGImage *CGImageRef;
#define NS_RETURNS_RETAINED __attribute__((ns_returns_retained))
#define CF_CONSUMED __attribute__((cf_consumed))
#define CF_RETURNS_RETAINED __attribute__((cf_returns_retained))
-#define NS_REQUIRES_PROPERTY_DEFINITIONS __attribute__((objc_requires_property_definitions))
extern const CFAllocatorRef kCFAllocatorDefault;
typedef struct _NSZone NSZone;
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-members-arc.mm b/clang/test/Analysis/Checkers/WebKit/unretained-members-arc.mm
index 00e6e6ec1dcfa..3491bc93ed98a 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-members-arc.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-members-arc.mm
@@ -64,39 +64,3 @@ void forceTmplToInstantiate(FooTmpl<SomeObj, CFMutableArrayRef>) {}
};
} // namespace ptr_to_ptr_to_retained
-
- at interface AnotherObject : NSObject {
- NSString *ns_string;
- CFStringRef cf_string;
- // expected-warning at -1{{Instance variable 'cf_string' in 'AnotherObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
- at property(nonatomic, strong) NSString *prop_string1;
- at property(nonatomic, assign) NSString *prop_string2;
-// expected-warning at -1{{Property 'prop_string2' in 'AnotherObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
- at property(nonatomic, unsafe_unretained) NSString *prop_string3;
-// expected-warning at -1{{Property 'prop_string3' in 'AnotherObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
- at property(nonatomic, readonly) NSString *prop_string4;
- at end
-
-NS_REQUIRES_PROPERTY_DEFINITIONS
- at interface NoSynthObject : NSObject {
- NSString *ns_string;
- CFStringRef cf_string;
- // expected-warning at -1{{Instance variable 'cf_string' in 'NoSynthObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
- at property(nonatomic, readonly, strong) NSString *prop_string1;
- at property(nonatomic, readonly, strong) NSString *prop_string2;
- at 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}}
- at 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 end
-
- at implementation NoSynthObject
-- (NSString *)prop_string1 {
- return nil;
-}
- at synthesize prop_string2;
- at synthesize prop_string3;
- at synthesize prop_string4;
- at end
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
index 46f65dfa603ad..0cb4c4ac0f6a0 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
@@ -99,28 +99,3 @@ @interface AnotherObject : NSObject {
@property(nonatomic, 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}}
@end
-
-NS_REQUIRES_PROPERTY_DEFINITIONS
- at interface NoSynthObject : NSObject {
- NSString *ns_string;
- // expected-warning at -1{{Instance variable 'ns_string' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
- CFStringRef cf_string;
- // expected-warning at -1{{Instance variable 'cf_string' in 'NoSynthObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
- at property(nonatomic, readonly, strong) NSString *prop_string1;
- at property(nonatomic, readonly, strong) NSString *prop_string2;
-// expected-warning at -1{{Property 'prop_string2' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'}}
- at 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}}
- at 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 end
-
- at implementation NoSynthObject
-- (NSString *)prop_string1 {
- return nil;
-}
- at synthesize prop_string2;
- at synthesize prop_string3;
- at synthesize prop_string4;
- at end
More information about the llvm-branch-commits
mailing list