diff options
Diffstat (limited to 'lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | lib/CodeGen/CGExprScalar.cpp | 32 |
1 files changed, 13 insertions, 19 deletions
diff --git a/lib/CodeGen/CGExprScalar.cpp b/lib/CodeGen/CGExprScalar.cpp index 11d1e8dfdb..cee8852cdc 100644 --- a/lib/CodeGen/CGExprScalar.cpp +++ b/lib/CodeGen/CGExprScalar.cpp @@ -134,14 +134,20 @@ public: return llvm::ConstantInt::get(EC->getInitVal()); return EmitLoadOfLValue(E); } - Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E); - Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E); - Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { return EmitLoadOfLValue(E);} + Value *VisitObjCSelectorExpr(ObjCSelectorExpr *E) { + return CGF.EmitObjCSelectorExpr(E); + } + Value *VisitObjCProtocolExpr(ObjCProtocolExpr *E) { + return CGF.EmitObjCProtocolExpr(E); + } + Value *VisitObjCIvarRefExpr(ObjCIvarRefExpr *E) { + return EmitLoadOfLValue(E); + } Value *VisitObjCPropertyRefExpr(ObjCPropertyRefExpr *E) { - CGF.ErrorUnsupported(E, "scalar expression (Objective-C property reference)"); - if (E->getType()->isVoidType()) - return 0; - return llvm::UndefValue::get(CGF.ConvertType(E->getType())); + return CGF.EmitObjCPropertyGet(E).getScalarVal(); + } + Value *VisitObjCMessageExpr(ObjCMessageExpr *E) { + return CGF.EmitObjCMessageExpr(E).getScalarVal(); } Value *VisitArraySubscriptExpr(ArraySubscriptExpr *E); @@ -196,10 +202,6 @@ public: return CGF.EmitCallExpr(E).getScalarVal(); } - Value *VisitObjCMessageExpr(ObjCMessageExpr *E) { - return CGF.EmitObjCMessageExpr(E).getScalarVal(); - } - Value *VisitStmtExpr(const StmtExpr *E); // Unary Operators. @@ -481,14 +483,6 @@ Value *ScalarExprEmitter::VisitShuffleVectorExpr(ShuffleVectorExpr *E) { return Builder.CreateShuffleVector(V1, V2, SV, "shuffle"); } -Value *ScalarExprEmitter::VisitObjCSelectorExpr(ObjCSelectorExpr *E) { - return CGF.EmitObjCSelectorExpr(E); -} - -Value *ScalarExprEmitter::VisitObjCProtocolExpr(ObjCProtocolExpr *E) { - return CGF.EmitObjCProtocolExpr(E); -} - Value *ScalarExprEmitter::VisitArraySubscriptExpr(ArraySubscriptExpr *E) { // Emit subscript expressions in rvalue context's. For most cases, this just // loads the lvalue formed by the subscript expr. However, we have to be |