diff --git a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
index 72199af..cd33476 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.cpp
@@ -236,7 +236,6 @@
 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 3c9560c..f9fcfe9 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/PtrTypesSemantics.h
@@ -76,14 +76,12 @@
   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 8faf6a2..b1350b9 100644
--- a/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
+++ b/clang/lib/StaticAnalyzer/Checkers/WebKit/RawPtrRefMemberChecker.cpp
@@ -28,7 +28,6 @@
 private:
   BugType Bug;
   mutable BugReporter *BR;
-  mutable llvm::DenseSet<const ObjCIvarDecl *> IvarDeclsToIgnore;
 
 protected:
   mutable std::optional<RetainTypeChecker> RTC;
@@ -37,8 +36,7 @@
   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 @@
       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 @@
                      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 @@
     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 @@
                              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 @@
       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 @@
       : 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 @@
       : 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 @@
     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 9e4356a..93e7dfd 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 @@
 #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 00e6e6e..3491bc9 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 @@
   };
 
 } // namespace ptr_to_ptr_to_retained
-
-@interface AnotherObject : NSObject {
-  NSString *ns_string;
-  CFStringRef cf_string;
-  // expected-warning@-1{{Instance variable 'cf_string' in 'AnotherObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
-@property(nonatomic, strong) NSString *prop_string1;
-@property(nonatomic, assign) NSString *prop_string2;
-// expected-warning@-1{{Property 'prop_string2' in 'AnotherObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
-@property(nonatomic, unsafe_unretained) NSString *prop_string3;
-// expected-warning@-1{{Property 'prop_string3' in 'AnotherObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
-@property(nonatomic, readonly) NSString *prop_string4;
-@end
-
-NS_REQUIRES_PROPERTY_DEFINITIONS
-@interface NoSynthObject : NSObject {
-  NSString *ns_string;
-  CFStringRef cf_string;
-  // expected-warning@-1{{Instance variable 'cf_string' in 'NoSynthObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
-@property(nonatomic, readonly, strong) NSString *prop_string1;
-@property(nonatomic, readonly, strong) NSString *prop_string2;
-@property(nonatomic, assign) NSString *prop_string3;
-// expected-warning@-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@-1{{Property 'prop_string4' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
-@end
-
-@implementation NoSynthObject
-- (NSString *)prop_string1 {
-  return nil;
-}
-@synthesize prop_string2;
-@synthesize prop_string3;
-@synthesize prop_string4;
-@end
diff --git a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
index 46f65df..0cb4c4a 100644
--- a/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
+++ b/clang/test/Analysis/Checkers/WebKit/unretained-members.mm
@@ -99,28 +99,3 @@
 @property(nonatomic, strong) NSString *prop_string;
 // expected-warning@-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
-@interface NoSynthObject : NSObject {
-  NSString *ns_string;
-  // expected-warning@-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@-1{{Instance variable 'cf_string' in 'NoSynthObject' is a retainable type 'CFStringRef'; member variables must be a RetainPtr}}
-}
-@property(nonatomic, readonly, strong) NSString *prop_string1;
-@property(nonatomic, readonly, strong) NSString *prop_string2;
-// expected-warning@-1{{Property 'prop_string2' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'}}
-@property(nonatomic, assign) NSString *prop_string3;
-// expected-warning@-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@-1{{Property 'prop_string4' in 'NoSynthObject' is a raw pointer to retainable type 'NSString'; member variables must be a RetainPtr}}
-@end
-
-@implementation NoSynthObject
-- (NSString *)prop_string1 {
-  return nil;
-}
-@synthesize prop_string2;
-@synthesize prop_string3;
-@synthesize prop_string4;
-@end
