[cfe-commits] r103028 - in /cfe/trunk: lib/CodeGen/CGObjC.cpp test/CodeGenObjCXX/ivar-objects.mm
Fariborz Jahanian
fjahanian at apple.com
Tue May 4 12:29:32 PDT 2010
Author: fjahanian
Date: Tue May 4 14:29:32 2010
New Revision: 103028
URL: http://llvm.org/viewvc/llvm-project?rev=103028&view=rev
Log:
Fixes a code gen. crash when ivar object has trivial constructor.
Modified:
cfe/trunk/lib/CodeGen/CGObjC.cpp
cfe/trunk/test/CodeGenObjCXX/ivar-objects.mm
Modified: cfe/trunk/lib/CodeGen/CGObjC.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjC.cpp?rev=103028&r1=103027&r2=103028&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjC.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjC.cpp Tue May 4 14:29:32 2010
@@ -441,18 +441,20 @@
LoadObjCSelf(), Ivar, 0);
const RecordType *RT = FieldType->getAs<RecordType>();
CXXRecordDecl *FieldClassDecl = cast<CXXRecordDecl>(RT->getDecl());
- if (Array) {
- const llvm::Type *BasePtr = ConvertType(FieldType);
- BasePtr = llvm::PointerType::getUnqual(BasePtr);
- llvm::Value *BaseAddrPtr =
- Builder.CreateBitCast(LV.getAddress(), BasePtr);
- EmitCXXAggrDestructorCall(FieldClassDecl->getDestructor(getContext()),
- Array, BaseAddrPtr);
- }
- else
- EmitCXXDestructorCall(FieldClassDecl->getDestructor(CGM.getContext()),
- Dtor_Complete, /*ForVirtualBase=*/false,
- LV.getAddress());
+ CXXDestructorDecl *Dtor = FieldClassDecl->getDestructor(getContext());
+ if (!Dtor->isTrivial())
+ if (Array) {
+ const llvm::Type *BasePtr = ConvertType(FieldType);
+ BasePtr = llvm::PointerType::getUnqual(BasePtr);
+ llvm::Value *BaseAddrPtr =
+ Builder.CreateBitCast(LV.getAddress(), BasePtr);
+ EmitCXXAggrDestructorCall(Dtor,
+ Array, BaseAddrPtr);
+ }
+ else
+ EmitCXXDestructorCall(Dtor,
+ Dtor_Complete, /*ForVirtualBase=*/false,
+ LV.getAddress());
}
}
FinishFunction();
Modified: cfe/trunk/test/CodeGenObjCXX/ivar-objects.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/ivar-objects.mm?rev=103028&r1=103027&r2=103028&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjCXX/ivar-objects.mm (original)
+++ cfe/trunk/test/CodeGenObjCXX/ivar-objects.mm Tue May 4 14:29:32 2010
@@ -69,3 +69,18 @@
[a release];
}
+// rdar: // 7468090
+class S {
+public:
+ S& operator = (const S&);
+};
+
+ at interface I {
+ S position;
+}
+ at property(assign, nonatomic) S position;
+ at end
+
+ at implementation I
+ @synthesize position;
+ at end
More information about the cfe-commits
mailing list