ir-gen support for class getter/setter call 
using property dot-syntax.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66556 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index 5798865..aa1f4c2 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -327,10 +327,17 @@
   else {
     const ObjCKVCRefExpr *KE = cast<ObjCKVCRefExpr>(Exp);
     Selector S = KE->getGetterMethod()->getSelector();
+    llvm::Value *Receiver;
+    if (KE->getClassProp()) {
+      const ObjCInterfaceDecl *OID = KE->getClassProp();
+      Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
+    }
+    else 
+      Receiver = EmitScalarExpr(KE->getBase());
     return CGM.getObjCRuntime().
              GenerateMessageSend(*this, Exp->getType(), S, 
-                                 EmitScalarExpr(KE->getBase()), 
-                                 false, CallArgList());
+                                 Receiver, 
+                                 KE->getClassProp() != 0, CallArgList());
   }
 }
 
@@ -348,10 +355,17 @@
   else if (const ObjCKVCRefExpr *E = dyn_cast<ObjCKVCRefExpr>(Exp)) {
     Selector S = E->getSetterMethod()->getSelector();
     CallArgList Args;
+    llvm::Value *Receiver;
+    if (E->getClassProp()) {
+      const ObjCInterfaceDecl *OID = E->getClassProp();
+      Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
+    }
+    else 
+      Receiver = EmitScalarExpr(E->getBase());
     Args.push_back(std::make_pair(Src, E->getType()));
     CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S, 
-                                             EmitScalarExpr(E->getBase()), 
-                                             false, Args);
+                                             Receiver, 
+                                             E->getClassProp() != 0, Args);
   }
   else
     assert (0 && "bad expression node in EmitObjCPropertySet");