summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGExpr.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2008-11-18 22:37:34 +0000
committerFariborz Jahanian <fjahanian@apple.com>2008-11-18 22:37:34 +0000
commit83f45b55f8673450d63e9c509507b4d93ada01cd (patch)
tree751e8abe8e29acf229d7029823147e4cd30e8ad6 /clang/lib/CodeGen/CGExpr.cpp
parent3095c32c89a6f21d03b5bb5940ffb1902eac1283 (diff)
downloadbcm5719-llvm-83f45b55f8673450d63e9c509507b4d93ada01cd.tar.gz
bcm5719-llvm-83f45b55f8673450d63e9c509507b4d93ada01cd.zip
Patch for generation of weak write barriers for objc
__weak objects. llvm-svn: 59560
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r--clang/lib/CodeGen/CGExpr.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp
index d537c9ca813..98a54c6863f 100644
--- a/clang/lib/CodeGen/CGExpr.cpp
+++ b/clang/lib/CodeGen/CGExpr.cpp
@@ -154,7 +154,7 @@ RValue CodeGenFunction::EmitLoadOfLValue(LValue LV, QualType ExprType) {
if (LV.isObjcWeak()) {
// load of a __weak object.
llvm::Value *AddrWeakObj = LV.getAddress();
- llvm::Value *read_weak = CGM.getObjCRuntime().EmitObjCWeakCall(*this,
+ llvm::Value *read_weak = CGM.getObjCRuntime().EmitObjCWeakRead(*this,
AddrWeakObj);
return RValue::get(read_weak);
}
@@ -335,6 +335,14 @@ RValue CodeGenFunction::EmitLoadOfExtVectorElementLValue(LValue LV,
/// is 'Ty'.
void CodeGenFunction::EmitStoreThroughLValue(RValue Src, LValue Dst,
QualType Ty) {
+ if (Dst.isObjcWeak()) {
+ // load of a __weak object.
+ llvm::Value *LvalueDst = Dst.getAddress();
+ llvm::Value *src = Src.getScalarVal();
+ CGM.getObjCRuntime().EmitObjCWeakAssign(*this, src, LvalueDst);
+ return;
+ }
+
if (!Dst.isSimple()) {
if (Dst.isVectorElt()) {
// Read/modify/write the vector, inserting the new element.
OpenPOWER on IntegriCloud