diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2008-11-18 21:45:40 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2008-11-18 21:45:40 +0000 |
commit | f5125d19e7b466a76a5471286ad2e3d038f8cf86 (patch) | |
tree | f8ae6d433d36dfb4299001ab3cf4c38dcbe03cfd /clang/lib/CodeGen/CGObjCMac.cpp | |
parent | b5e867acff9807091eae51d383923c71c6acff05 (diff) | |
download | bcm5719-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.cpp | 14 |
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); |