https://github.com/AtariDreams updated 
https://github.com/llvm/llvm-project/pull/81335

>From a9626371dfceb87dc563092fa201df9408efcb77 Mon Sep 17 00:00:00 2001
From: Rose <83477269+ataridre...@users.noreply.github.com>
Date: Fri, 9 Feb 2024 17:51:15 -0500
Subject: [PATCH 1/2] [ObjC] Add pre-commit tests [NFC]

---
 .../CodeGenObjC/constant-non-fragile-ivar-offset.m  | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m 
b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
index 788b3220af3067..40a97ba62ec6cf 100644
--- a/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
+++ b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
@@ -1,6 +1,7 @@
 // RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -emit-llvm %s -o - | 
FileCheck %s
 
 // CHECK: @"OBJC_IVAR_$_StaticLayout.static_layout_ivar" = hidden constant i64 
20
+// CHECK: @"OBJC_IVAR_$_StaticLayoutSubClass.static_layout_ivar2" = hidden 
global i64 24
 // CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden 
global i64 12
 
 @interface NSObject {
@@ -20,6 +21,18 @@ -(void)meth {
 }
 @end
 
+@interface StaticLayoutSubClass : StaticLayout
+@end
+
+@implementation StaticLayoutSubClass {
+  int static_layout_ivar2;
+}
+-(void)meth2 {
+  static_layout_ivar2 = 0;
+  // CHECK: load i64, ptr @"OBJC_IVAR_$_StaticLayoutSubClass
+}
+@end
+
 @interface NotNSObject {
   int these, might, change;
 }

>From 1f55cf14c0ad1501c487fb6e1dcd91493498bacf Mon Sep 17 00:00:00 2001
From: Rose <83477269+ataridre...@users.noreply.github.com>
Date: Fri, 9 Feb 2024 17:47:59 -0500
Subject: [PATCH 2/2] [ObjC] Recursively check superclasses to see if any
 inherit from NSObject

If an NSObject subclass has fixed offsets, then so must the subclasses of that 
subclass!
---
 clang/lib/CodeGen/CGObjCMac.cpp                 | 17 ++++++++++++-----
 .../constant-non-fragile-ivar-offset.m          |  4 ++--
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 27d77e9a8a5511..ec4d432b8abf2b 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -1593,12 +1593,19 @@ class CGObjCNonFragileABIMac : public CGObjCCommonMac {
   }
 
   bool isClassLayoutKnownStatically(const ObjCInterfaceDecl *ID) {
+    if (!ID)
+      return false;
+
+    if (ID->getName() == "NSObject")
+      return true;
+
     // NSObject is a fixed size. If we can see the @implementation of a class
-    // which inherits from NSObject then we know that all it's offsets also 
must
-    // be fixed. FIXME: Can we do this if see a chain of super classes with
-    // implementations leading to NSObject?
-    return ID->getImplementation() && ID->getSuperClass() &&
-           ID->getSuperClass()->getName() == "NSObject";
+    // which inherits from NSObject, then we know that all its offsets must
+    // be fixed.
+
+    // Check recursively for all intermediate superclasses.
+    return ID->getImplementation() &&
+           isClassLayoutKnownStatically(ID->getSuperClass());
   }
 
 public:
diff --git a/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m 
b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
index 40a97ba62ec6cf..c5bc2be0dfdb84 100644
--- a/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
+++ b/clang/test/CodeGenObjC/constant-non-fragile-ivar-offset.m
@@ -1,7 +1,7 @@
 // RUN: %clang_cc1 -triple x86_64-apple-macosx10.14.0 -emit-llvm %s -o - | 
FileCheck %s
 
 // CHECK: @"OBJC_IVAR_$_StaticLayout.static_layout_ivar" = hidden constant i64 
20
-// CHECK: @"OBJC_IVAR_$_StaticLayoutSubClass.static_layout_ivar2" = hidden 
global i64 24
+// CHECK: @"OBJC_IVAR_$_StaticLayoutSubClass.static_layout_ivar2" = hidden 
constant i64 24
 // CHECK: @"OBJC_IVAR_$_NotStaticLayout.not_static_layout_ivar" = hidden 
global i64 12
 
 @interface NSObject {
@@ -29,7 +29,7 @@ @implementation StaticLayoutSubClass {
 }
 -(void)meth2 {
   static_layout_ivar2 = 0;
-  // CHECK: load i64, ptr @"OBJC_IVAR_$_StaticLayoutSubClass
+  // CHECK-NOT: load i64, ptr @"OBJC_IVAR_$_StaticLayoutSubClass
 }
 @end
 

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to