[PATCH] D33698: [CodeGen][ObjC] Fix assertion failure in CodeGenFunction::EmitARCStoreStrongCall

Akira Hatanaka via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Jun 1 11:41:48 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL304449: [CodeGen][ObjC] Fix assertion failure in EmitARCStoreStrongCall. (authored by ahatanak).

Changed prior to commit:
  https://reviews.llvm.org/D33698?vs=100787&id=101060#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D33698

Files:
  cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
  cfe/trunk/test/CodeGenObjC/parameterized_classes.m


Index: cfe/trunk/test/CodeGenObjC/parameterized_classes.m
===================================================================
--- cfe/trunk/test/CodeGenObjC/parameterized_classes.m
+++ cfe/trunk/test/CodeGenObjC/parameterized_classes.m
@@ -68,3 +68,31 @@
   // CHECK: call i8* @objc_retainBlock
   // CHECK: ret void
 }
+
+// CHECK-LABEL: define internal void @"\01-[Derived setDest:]
+// CHECK: %[[SELFADDR:.*]] = alloca %[[SELFTY:.*]]*
+// CHECK: %[[AADDR:.*]] = alloca %[[IVARTY:.*]]*
+// CHECK: %[[V2:.*]] = load %[[IVARTY]]*, %[[IVARTY]]** %[[AADDR]]
+// CHECK: %[[V3:.*]] = load %[[SELFTY]]*, %[[SELFTY]]** %[[SELFADDR]]
+// CHECK: %[[IVAR:.*]] = load i64, i64* @"OBJC_IVAR_$_Base._destination"
+// CHECK: %[[V4:.*]] = bitcast %[[SELFTY]]* %[[V3]] to i8*
+// CHECK: %[[ADDPTR:.*]] = getelementptr inbounds i8, i8* %[[V4]], i64 %[[IVAR]]
+// CHECK: %[[V5:.*]] = bitcast i8* %[[ADDPTR]] to %[[IVARTY]]**
+// CHECK: %[[V6:.*]] = bitcast %[[IVARTY]]** %[[V5]] to i8**
+// CHECK: %[[V7:.*]] = bitcast %[[IVARTY]]* %[[V2]] to i8*
+// CHECK: call void @objc_storeStrong(i8** %[[V6]], i8* %[[V7]])
+
+ at interface Base<DestType> : NSObject {
+  DestType _destination;
+}
+ at end
+
+ at interface Derived : Base<NSObject *>
+- (void)setDest:(NSObject *)a;
+ at end
+
+ at implementation Derived
+- (void)setDest:(NSObject *)a {
+  _destination = a;
+}
+ at end
Index: cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
===================================================================
--- cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
+++ cfe/trunk/lib/CodeGen/CGObjCRuntime.cpp
@@ -90,7 +90,11 @@
                                                unsigned CVRQualifiers,
                                                llvm::Value *Offset) {
   // Compute (type*) ( (char *) BaseValue + Offset)
-  QualType IvarTy = Ivar->getType().withCVRQualifiers(CVRQualifiers);
+  QualType InterfaceTy{OID->getTypeForDecl(), 0};
+  QualType ObjectPtrTy =
+      CGF.CGM.getContext().getObjCObjectPointerType(InterfaceTy);
+  QualType IvarTy =
+      Ivar->getUsageType(ObjectPtrTy).withCVRQualifiers(CVRQualifiers);
   llvm::Type *LTy = CGF.CGM.getTypes().ConvertTypeForMem(IvarTy);
   llvm::Value *V = CGF.Builder.CreateBitCast(BaseValue, CGF.Int8PtrTy);
   V = CGF.Builder.CreateInBoundsGEP(V, Offset, "add.ptr");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33698.101060.patch
Type: text/x-patch
Size: 2269 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20170601/82904518/attachment.bin>


More information about the cfe-commits mailing list