summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGObjCMac.cpp
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2008-11-18 21:45:40 +0000
committerFariborz Jahanian <fjahanian@apple.com>2008-11-18 21:45:40 +0000
commitf5125d19e7b466a76a5471286ad2e3d038f8cf86 (patch)
treef8ae6d433d36dfb4299001ab3cf4c38dcbe03cfd /clang/lib/CodeGen/CGObjCMac.cpp
parentb5e867acff9807091eae51d383923c71c6acff05 (diff)
downloadbcm5719-llvm-f5125d19e7b466a76a5471286ad2e3d038f8cf86.tar.gz
bcm5719-llvm-f5125d19e7b466a76a5471286ad2e3d038f8cf86.zip
Generate objc_read_weak for __weak objc loads.
llvm-svn: 59553
Diffstat (limited to 'clang/lib/CodeGen/CGObjCMac.cpp')
-rw-r--r--clang/lib/CodeGen/CGObjCMac.cpp14
1 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGObjCMac.cpp b/clang/lib/CodeGen/CGObjCMac.cpp
index 15918314585..f3cf21eb314 100644
--- a/clang/lib/CodeGen/CGObjCMac.cpp
+++ b/clang/lib/CodeGen/CGObjCMac.cpp
@@ -454,7 +454,8 @@ public:
const ObjCAtThrowStmt &S);
virtual void EmitSynchronizedStmt(CodeGen::CodeGenFunction &CGF,
const ObjCAtSynchronizedStmt &S);
-
+ virtual llvm::Value * EmitObjCWeakCall(CodeGen::CodeGenFunction &CGF,
+ llvm::Value *AddrWeakObj);
};
} // end anonymous namespace
@@ -1775,6 +1776,17 @@ void CodeGenFunction::EmitJumpThroughFinally(ObjCEHEntry *E,
EmitBranch(ExecuteTryExit ? E->FinallyBlock : E->FinallyNoExit);
}
+/// EmitObjCWeakCall - Code gen for loading value of a __weak
+/// object: objc_read_weak (id *src)
+///
+llvm::Value * CGObjCMac::EmitObjCWeakCall(CodeGen::CodeGenFunction &CGF,
+ llvm::Value *AddrWeakObj)
+{
+ llvm::Value *read_weak = CGF.Builder.CreateCall(ObjCTypes.GcReadWeakFn,
+ AddrWeakObj, "weakobj");
+ return read_weak;
+}
+
/// EmitSynchronizedStmt - Code gen for @synchronized(expr) stmt;
/// Effectively generating code for:
/// objc_sync_enter(expr);
OpenPOWER on IntegriCloud