aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen/CGObjC.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2012-01-08 19:13:23 +0000
committerFariborz Jahanian <fjahanian@apple.com>2012-01-08 19:13:23 +0000
commitb08cfb3c5909752c0e501a4e5c31a507a4cc1f72 (patch)
treec791e5ec0012bcf5fc9ae79a55fba32717ebd9ea /lib/CodeGen/CGObjC.cpp
parent2215eef02c3ac84c3189e5ac694326038226b467 (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.cpp22
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;
}