diff options
author | Fariborz Jahanian <fjahanian@apple.com> | 2010-06-17 19:56:20 +0000 |
---|---|---|
committer | Fariborz Jahanian <fjahanian@apple.com> | 2010-06-17 19:56:20 +0000 |
commit | 9240f3dac7e597c67c8157da33294a5b642b11c7 (patch) | |
tree | 9512ea07d1701d8c106e89d6019eea5d77e11ca3 /clang/lib/CodeGen/CGExpr.cpp | |
parent | 4eb47194326ec2393ba2a9d0977a5796d2612e7f (diff) | |
download | bcm5719-llvm-9240f3dac7e597c67c8157da33294a5b642b11c7.tar.gz bcm5719-llvm-9240f3dac7e597c67c8157da33294a5b642b11c7.zip |
Objective-c++ IRGen. Support for @selector expression as
an lvalue. Fixes PR7390.
llvm-svn: 106235
Diffstat (limited to 'clang/lib/CodeGen/CGExpr.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 4b66ec277e0..aab54099fde 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -568,6 +568,8 @@ LValue CodeGenFunction::EmitLValue(const Expr *E) { switch (E->getStmtClass()) { default: return EmitUnsupportedLValue(E, "l-value expression"); + case Expr::ObjCSelectorExprClass: + return EmitObjCSelectorLValue(cast<ObjCSelectorExpr>(E)); case Expr::ObjCIsaExprClass: return EmitObjCIsaExpr(cast<ObjCIsaExpr>(E)); case Expr::BinaryOperatorClass: @@ -1977,6 +1979,12 @@ LValue CodeGenFunction::EmitObjCMessageExprLValue(const ObjCMessageExpr *E) { return LValue::MakeAddr(RV.getAggregateAddr(), MakeQualifiers(E->getType())); } +LValue CodeGenFunction::EmitObjCSelectorLValue(const ObjCSelectorExpr *E) { + llvm::Value *V = + CGM.getObjCRuntime().GetSelector(Builder, E->getSelector(), true); + return LValue::MakeAddr(V, MakeQualifiers(E->getType())); +} + llvm::Value *CodeGenFunction::EmitIvarOffset(const ObjCInterfaceDecl *Interface, const ObjCIvarDecl *Ivar) { return CGM.getObjCRuntime().EmitIvarOffset(*this, Interface, Ivar); |