diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-06 18:07:23 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-06 18:07:23 +0000 |
commit | 1e1b54926b86146682df400174957b1a788ba9c8 (patch) | |
tree | 1e0114093e24d4836d408848cd4eaf88a6975cfa /clang/lib/CodeGen/CGObjCMac.cpp | |
parent | adebf0caf5fec14af54f27a876e5cdcc8516427b (diff) | |
download | bcm5719-llvm-1e1b54926b86146682df400174957b1a788ba9c8.tar.gz bcm5719-llvm-1e1b54926b86146682df400174957b1a788ba9c8.zip |
objc++: some declarations related to atomic
properties of c++ object types with non-trivial
assignment copy. Not used yet. // rdar://6137845
llvm-svn: 147666
Diffstat (limited to 'clang/lib/CodeGen/CGObjCMac.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGObjCMac.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp index a782db76f68..3ea7e4b38c9 100644 --- a/clang/lib/CodeGen/CGObjCMac.cpp +++ b/clang/lib/CodeGen/CGObjCMac.cpp @@ -273,6 +273,25 @@ public: return CGM.CreateRuntimeFunction(FTy, "objc_copyStruct"); } + /// This routine declares and returns address of: + /// void objc_copyCppObjectAtomic( + /// void *dest, const void *src, + /// void (*copyHelper) (void *dest, const void *source)); + llvm::Constant *getCppAtomicObjectFunction() { + CodeGen::CodeGenTypes &Types = CGM.getTypes(); + ASTContext &Ctx = CGM.getContext(); + /// void objc_copyCppObjectAtomic(void *dest, const void *src, void *helper); + SmallVector<CanQualType,3> Params; + Params.push_back(Ctx.VoidPtrTy); + Params.push_back(Ctx.VoidPtrTy); + Params.push_back(Ctx.VoidPtrTy); + llvm::FunctionType *FTy = + Types.GetFunctionType(Types.getFunctionInfo(Ctx.VoidTy, Params, + FunctionType::ExtInfo()), + false); + return CGM.CreateRuntimeFunction(FTy, "objc_copyCppObjectAtomic"); + } + llvm::Constant *getEnumerationMutationFn() { CodeGen::CodeGenTypes &Types = CGM.getTypes(); ASTContext &Ctx = CGM.getContext(); @@ -1056,6 +1075,7 @@ public: virtual llvm::Constant *GetPropertySetFunction(); virtual llvm::Constant *GetGetStructFunction(); virtual llvm::Constant *GetSetStructFunction(); + virtual llvm::Constant *GetCppAtomicObjectFunction(); virtual llvm::Constant *EnumerationMutationFunction(); virtual void EmitTryStmt(CodeGen::CodeGenFunction &CGF, @@ -1318,6 +1338,9 @@ public: virtual llvm::Constant *GetGetStructFunction() { return ObjCTypes.getCopyStructFn(); } + virtual llvm::Constant *GetCppAtomicObjectFunction() { + return ObjCTypes.getCppAtomicObjectFunction(); + } virtual llvm::Constant *EnumerationMutationFunction() { return ObjCTypes.getEnumerationMutationFn(); @@ -2641,6 +2664,10 @@ llvm::Constant *CGObjCMac::GetSetStructFunction() { return ObjCTypes.getCopyStructFn(); } +llvm::Constant *CGObjCMac::GetCppAtomicObjectFunction() { + return ObjCTypes.getCppAtomicObjectFunction(); +} + llvm::Constant *CGObjCMac::EnumerationMutationFunction() { return ObjCTypes.getEnumerationMutationFn(); } |