Patch to support Gnu runtime's typed selectors.
Patch by David Chisnall.



git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@71023 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/CGObjCMac.cpp b/lib/CodeGen/CGObjCMac.cpp
index 5571f0f..8043f76 100644
--- a/lib/CodeGen/CGObjCMac.cpp
+++ b/lib/CodeGen/CGObjCMac.cpp
@@ -1016,7 +1016,8 @@
                                               Selector Sel,
                                               llvm::Value *Receiver,
                                               bool IsClassMessage,
-                                              const CallArgList &CallArgs);
+                                              const CallArgList &CallArgs,
+                                              const ObjCMethodDecl *Method);
 
   virtual CodeGen::RValue 
   GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
@@ -1032,7 +1033,12 @@
                                 const ObjCInterfaceDecl *ID);
 
   virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel);
-  
+
+  /// The NeXT/Apple runtimes do not support typed selectors; just emit an
+  /// untyped one.
+  virtual llvm::Value *GetSelector(CGBuilderTy &Builder,
+                                   const ObjCMethodDecl *Method);
+
   virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD);
 
   virtual void GenerateClass(const ObjCImplementationDecl *ClassDecl);
@@ -1200,7 +1206,8 @@
                                               Selector Sel,
                                               llvm::Value *Receiver,
                                               bool IsClassMessage,
-                                              const CallArgList &CallArgs);
+                                              const CallArgList &CallArgs,
+                                              const ObjCMethodDecl *Method);
   
   virtual CodeGen::RValue 
   GenerateMessageSendSuper(CodeGen::CodeGenFunction &CGF,
@@ -1217,6 +1224,12 @@
   
   virtual llvm::Value *GetSelector(CGBuilderTy &Builder, Selector Sel)
     { return EmitSelector(Builder, Sel); }
+
+  /// The NeXT/Apple runtimes do not support typed selectors; just emit an
+  /// untyped one.
+  virtual llvm::Value *GetSelector(CGBuilderTy &Builder,
+                                   const ObjCMethodDecl *Method)
+    { return EmitSelector(Builder, Method->getSelector()); }
   
   virtual void GenerateCategory(const ObjCCategoryImplDecl *CMD);
   
@@ -1303,6 +1316,10 @@
 llvm::Value *CGObjCMac::GetSelector(CGBuilderTy &Builder, Selector Sel) {
   return EmitSelector(Builder, Sel);
 }
+llvm::Value *CGObjCMac::GetSelector(CGBuilderTy &Builder, const ObjCMethodDecl
+    *Method) {
+  return EmitSelector(Builder, Method->getSelector());
+}
 
 /// Generate a constant CFString object.
 /* 
@@ -1382,7 +1399,8 @@
                                                Selector Sel,
                                                llvm::Value *Receiver,
                                                bool IsClassMessage,
-                                               const CallArgList &CallArgs) {
+                                               const CallArgList &CallArgs,
+                                               const ObjCMethodDecl *Method) {
   return EmitMessageSend(CGF, ResultType, Sel,
                          Receiver, CGF.getContext().getObjCIdType(),
                          false, CallArgs);
@@ -4983,7 +5001,8 @@
                                                Selector Sel,
                                                llvm::Value *Receiver,
                                                bool IsClassMessage,
-                                               const CallArgList &CallArgs) {
+                                               const CallArgList &CallArgs,
+                                               const ObjCMethodDecl *Method) {
   return EmitMessageSend(CGF, ResultType, Sel,
                          Receiver, CGF.getContext().getObjCIdType(),
                          false, CallArgs);