diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-08 19:13:23 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2012-01-08 19:13:23 +0000 |
commit | b08cfb3c5909752c0e501a4e5c31a507a4cc1f72 (patch) | |
tree | c791e5ec0012bcf5fc9ae79a55fba32717ebd9ea /lib/CodeGen/CGObjC.cpp | |
parent | 2215eef02c3ac84c3189e5ac694326038226b467 (diff) |
objc++: more atomic property api code for
c++ object properties. wip.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@147750 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGObjC.cpp')
-rw-r--r-- | lib/CodeGen/CGObjC.cpp | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp index 1b3eba4018..b772361d37 100644 --- a/lib/CodeGen/CGObjC.cpp +++ b/lib/CodeGen/CGObjC.cpp @@ -2549,18 +2549,22 @@ CodeGenFunction::GenerateObjCAtomicCopyHelperFunction( if ((!(PD->getPropertyAttributes() & ObjCPropertyDecl::OBJC_PR_atomic)) || /* temporary */ true) return 0; + llvm::Constant * HelperFn = 0; if (forSetter) { if (hasTrivialSetExpr(PID)) return 0; + assert(PID->getSetterCXXAssignment() && "SetterCXXAssignment - null"); + if ((HelperFn = CGM.getAtomicSetterHelperFnMap(Ty))) + return HelperFn; } - else + else { if (hasTrivialGetExpr(PID)) return 0; - llvm::Constant * HelperFn = CGM.getAtomicHelperFnMap(Ty); - if (HelperFn) - return HelperFn; + assert(PID->getGetterCXXConstructor() && "getGetterCXXConstructor - null"); + if ((HelperFn = CGM.getAtomicGetterHelperFnMap(Ty))) + return HelperFn; + } - assert(PID->getSetterCXXAssignment() && "SetterCXXAssignment - null"); ASTContext &C = getContext(); IdentifierInfo *II @@ -2615,7 +2619,8 @@ CodeGenFunction::GenerateObjCAtomicCopyHelperFunction( VK_LValue, OK_Ordinary, SourceLocation()); Expr *Args[2] = { DST, SRC }; - CallExpr *CalleeExp = cast<CallExpr>(PID->getSetterCXXAssignment()); + CallExpr *CalleeExp = forSetter ? cast<CallExpr>(PID->getSetterCXXAssignment()) + : cast<CallExpr>(PID->getGetterCXXConstructor()); CXXOperatorCallExpr *TheCall = new (C) CXXOperatorCallExpr(C, OO_Equal, CalleeExp->getCallee(), Args, 2, DestTy->getPointeeType(), @@ -2625,7 +2630,10 @@ CodeGenFunction::GenerateObjCAtomicCopyHelperFunction( FinishFunction(); HelperFn = llvm::ConstantExpr::getBitCast(Fn, VoidPtrTy); - CGM.setAtomicHelperFnMap(Ty, HelperFn); + if (forSetter) + CGM.setAtomicSetterHelperFnMap(Ty, HelperFn); + else + CGM.setAtomicGetterHelperFnMap(Ty, HelperFn); return HelperFn; } |