[cfe-commits] r66854 - in /cfe/trunk: lib/CodeGen/CGObjCMac.cpp test/CodeGenObjC/objc2-strong-cast.m
Fariborz Jahanian
fjahanian at apple.com
Thu Mar 12 17:42:52 PDT 2009
Author: fjahanian
Date: Thu Mar 12 19:42:52 2009
New Revision: 66854
URL: http://llvm.org/viewvc/llvm-project?rev=66854&view=rev
Log:
Fixed an ir-gen bug related to strong-cast generation of
source being a non-pointer.
Added:
cfe/trunk/test/CodeGenObjC/objc2-strong-cast.m
Modified:
cfe/trunk/lib/CodeGen/CGObjCMac.cpp
Modified: cfe/trunk/lib/CodeGen/CGObjCMac.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGObjCMac.cpp?rev=66854&r1=66853&r2=66854&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGObjCMac.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGObjCMac.cpp Thu Mar 12 19:42:52 2009
@@ -2239,6 +2239,10 @@
void CGObjCMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignWeakFn,
@@ -2252,6 +2256,10 @@
void CGObjCMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignGlobalFn,
@@ -2265,6 +2273,10 @@
void CGObjCMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignIvarFn,
@@ -2278,6 +2290,10 @@
void CGObjCMac::EmitObjCStrongCastAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignStrongCastFn,
@@ -5096,6 +5112,10 @@
void CGObjCNonFragileABIMac::EmitObjCIvarAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignIvarFn,
@@ -5110,6 +5130,10 @@
CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignStrongCastFn,
@@ -5139,6 +5163,10 @@
void CGObjCNonFragileABIMac::EmitObjCWeakAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignWeakFn,
@@ -5152,6 +5180,10 @@
void CGObjCNonFragileABIMac::EmitObjCGlobalAssign(CodeGen::CodeGenFunction &CGF,
llvm::Value *src, llvm::Value *dst)
{
+ if (!isa<llvm::PointerType>(src->getType())) {
+ src = CGF.Builder.CreateBitCast(src, ObjCTypes.LongTy);
+ src = CGF.Builder.CreateIntToPtr(src, ObjCTypes.Int8PtrTy);
+ }
src = CGF.Builder.CreateBitCast(src, ObjCTypes.ObjectPtrTy);
dst = CGF.Builder.CreateBitCast(dst, ObjCTypes.PtrObjectPtrTy);
CGF.Builder.CreateCall2(ObjCTypes.GcAssignGlobalFn,
Added: cfe/trunk/test/CodeGenObjC/objc2-strong-cast.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjC/objc2-strong-cast.m?rev=66854&view=auto
==============================================================================
--- cfe/trunk/test/CodeGenObjC/objc2-strong-cast.m (added)
+++ cfe/trunk/test/CodeGenObjC/objc2-strong-cast.m Thu Mar 12 19:42:52 2009
@@ -0,0 +1,17 @@
+// RUN: clang -fnext-runtime -emit-llvm -o %t %s
+
+ at interface I {
+ __attribute__((objc_gc(strong))) signed long *_documentIDs;
+ __attribute__((objc_gc(strong))) id *IdocumentIDs;
+}
+- (void) _getResultsOfMatches;
+ at end
+
+ at implementation I
+-(void) _getResultsOfMatches {
+ _documentIDs[2] = _documentIDs[3];
+ IdocumentIDs[2] = IdocumentIDs[3];
+}
+
+ at end
+
More information about the cfe-commits
mailing list