diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-11-18 22:37:34 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-11-18 22:37:34 +0000 |
commit | 83f45b55f8673450d63e9c509507b4d93ada01cd (patch) | |
tree | 751e8abe8e29acf229d7029823147e4cd30e8ad6 /clang/lib/CodeGen/CGExpr.cpp | |
parent | 3095c32c89a6f21d03b5bb5940ffb1902eac1283 (diff) | |
download | bcm5719-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.cpp | 10 |
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. |