diff options
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 5 | ||||
-rw-r--r-- | clang/lib/CodeGen/CGDecl.cpp | 3 |
2 files changed, 4 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index e21664607cf..c40cfaf6a97 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -1016,9 +1016,8 @@ GenerateCopyHelperFunction(const llvm::StructType *T, Srcv = Builder.CreateBitCast(Srcv, PtrStructTy); Srcv = Builder.CreateStructGEP(Srcv, CGF.getByRefValueLLVMField(VD), VD->getNameAsString()); - Dstv = Builder.CreateStructGEP(DstObj, index); - Dstv = Builder.CreateLoad(Dstv); - Dstv = Builder.CreateBitCast(Dstv, PtrStructTy); + + Dstv = Builder.CreateBitCast(DstObj, PtrStructTy); Dstv = Builder.CreateStructGEP(Dstv, CGF.getByRefValueLLVMField(VD), VD->getNameAsString()); CGF.EmitSynthesizedCXXCopyCtor(Dstv, Srcv, diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index cb0b09da5c6..7ccd80d0e8f 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -659,7 +659,8 @@ void CodeGenFunction::EmitAutoVarDecl(const VarDecl &D, if (Ty->isBlockPointerType()) { flag |= BLOCK_FIELD_IS_BLOCK; flags |= BLOCK_HAS_COPY_DISPOSE; - } else if (BlockRequiresCopying(Ty)) { + } else if (getContext().isObjCNSObjectType(Ty) || + Ty->isObjCObjectPointerType()) { flag |= BLOCK_FIELD_IS_OBJECT; flags |= BLOCK_HAS_COPY_DISPOSE; } |