Implement ir gen. for setter/getter applied to 'super' 
in a property dot-syntax notation.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67382 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjC.cpp b/lib/CodeGen/CGObjC.cpp
index aa1f4c2..84d60ea 100644
--- a/lib/CodeGen/CGObjC.cpp
+++ b/lib/CodeGen/CGObjC.cpp
@@ -332,6 +332,20 @@
       const ObjCInterfaceDecl *OID = KE->getClassProp();
       Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
     }
+    else if (isa<ObjCSuperExpr>(KE->getBase())) {
+      Receiver = LoadObjCSelf();
+      const ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(CurFuncDecl);
+      bool isClassMessage = OMD->isClassMethod();
+      bool isCategoryImpl = isa<ObjCCategoryImplDecl>(OMD->getDeclContext());
+      return CGM.getObjCRuntime().GenerateMessageSendSuper(*this, 
+                                                    KE->getType(),
+                                                    S,
+                                                    OMD->getClassInterface(),
+                                                    isCategoryImpl,
+                                                    Receiver,
+                                                    isClassMessage,
+                                                    CallArgList());
+    }
     else 
       Receiver = EmitScalarExpr(KE->getBase());
     return CGM.getObjCRuntime().
@@ -360,7 +374,22 @@
       const ObjCInterfaceDecl *OID = E->getClassProp();
       Receiver = CGM.getObjCRuntime().GetClass(Builder, OID);
     }
-    else 
+    else if (isa<ObjCSuperExpr>(E->getBase())) {
+      Receiver = LoadObjCSelf();
+      const ObjCMethodDecl *OMD = cast<ObjCMethodDecl>(CurFuncDecl);
+      bool isClassMessage = OMD->isClassMethod();
+      bool isCategoryImpl = isa<ObjCCategoryImplDecl>(OMD->getDeclContext());
+      CGM.getObjCRuntime().GenerateMessageSendSuper(*this, 
+                                                    E->getType(),
+                                                    S,
+                                                    OMD->getClassInterface(),
+                                                    isCategoryImpl,
+                                                    Receiver,
+                                                    isClassMessage,
+                                                    Args);
+      return;
+    }
+    else
       Receiver = EmitScalarExpr(E->getBase());
     Args.push_back(std::make_pair(Src, E->getType()));
     CGM.getObjCRuntime().GenerateMessageSend(*this, getContext().VoidTy, S,