r323257 - AST: correct mangling for SEL on MS ABI

Saleem Abdulrasool via cfe-commits cfe-commits at lists.llvm.org
Tue Jan 23 12:56:52 PST 2018


Author: compnerd
Date: Tue Jan 23 12:56:52 2018
New Revision: 323257

URL: http://llvm.org/viewvc/llvm-project?rev=323257&view=rev
Log:
AST: correct mangling for SEL on MS ABI

We would previously treat `SEL` as a pointer-only type.  This is not the
case.  It should be treated similarly to `id` and `Class`.  Add some
test cases to ensure that it will be properly handled as well.

Modified:
    cfe/trunk/lib/AST/MicrosoftMangle.cpp
    cfe/trunk/test/CodeGenObjCXX/msabi-objc-types.mm

Modified: cfe/trunk/lib/AST/MicrosoftMangle.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/MicrosoftMangle.cpp?rev=323257&r1=323256&r2=323257&view=diff
==============================================================================
--- cfe/trunk/lib/AST/MicrosoftMangle.cpp (original)
+++ cfe/trunk/lib/AST/MicrosoftMangle.cpp Tue Jan 23 12:56:52 2018
@@ -1839,7 +1839,6 @@ void MicrosoftCXXNameMangler::mangleType
     mangleArtificalTagType(TTK_Struct, "objc_class");
     break;
   case BuiltinType::ObjCSel:
-    Out << "PA";
     mangleArtificalTagType(TTK_Struct, "objc_selector");
     break;
 

Modified: cfe/trunk/test/CodeGenObjCXX/msabi-objc-types.mm
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenObjCXX/msabi-objc-types.mm?rev=323257&r1=323256&r2=323257&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenObjCXX/msabi-objc-types.mm (original)
+++ cfe/trunk/test/CodeGenObjCXX/msabi-objc-types.mm Tue Jan 23 12:56:52 2018
@@ -68,6 +68,24 @@ void m(const id) {}
 void m(const I *) {}
 // CHECK-LABEL: "\01?m@@YAXPBUI@@@Z"
 
+void n(SEL) {}
+// CHECK-LABEL: "\01?n@@YAXPAUobjc_selector@@@Z"
+
+void n(SEL *) {}
+// CHECK-LABEL: "\01?n@@YAXPAPAUobjc_selector@@@Z"
+
+void n(const SEL *) {}
+// CHECK-LABEL: "\01?n@@YAXPBQAUobjc_selector@@@Z"
+
+void n(SEL &) {}
+// CHECK-LABEL: "\01?n@@YAXAAPAUobjc_selector@@@Z"
+
+void n(const SEL &) {}
+// CHECK-LABEL: "\01?n@@YAXABQAUobjc_selector@@@Z"
+
+void n(SEL &&) {}
+// CHECK-LABEL: "\01?n@@YAX$$QAPAUobjc_selector@@@Z"
+
 struct __declspec(dllexport) s {
   struct s &operator=(const struct s &) = delete;
 
@@ -124,6 +142,27 @@ struct __declspec(dllexport) s {
 
   void m(const Class &&) {}
   // CHECK-LABEL: "\01?m at s@@QAAX$$QBQAUobjc_class@@@Z"
+
+  void m(SEL) {}
+  // CHECK-LABEL: "\01?m at s@@QAAXPAUobjc_selector@@@Z"
+
+  void m(SEL *) {}
+  // CHECK-LABEL: "\01?m at s@@QAAXPAPAUobjc_selector@@@Z"
+
+  void m(const SEL *) {}
+  // CHECK-LABEL: "\01?m at s@@QAAXPBQAUobjc_selector@@@Z"
+
+  void m(SEL &) {}
+  // CHECK-LABEL: "\01?m at s@@QAAXAAPAUobjc_selector@@@Z"
+
+  void m(const SEL &) {}
+  // CHECK-LABEL: "\01?m at s@@QAAXABQAUobjc_selector@@@Z"
+
+  void m(SEL &&) {}
+  // CHECK-LABEL: "\01?m at s@@QAAX$$QAPAUobjc_selector@@@Z"
+
+  void m(const SEL &&) {}
+  // CHECK-LABEL: "\01?m at s@@QAAX$$QBQAUobjc_selector@@@Z"
 };
 
 template <typename T>
@@ -145,3 +184,9 @@ template struct t<id>;
 template struct t<remove_pointer<id>::type>;
 // CHECK-LABEL: "\01??0?$t at Uobjc_object@@@@QAA at XZ"
 
+template struct t<SEL>;
+// CHECK-LABEL: "\01??0?$t at PAUobjc_selector@@@@QAA at XZ"
+
+template struct t<remove_pointer<SEL>::type>;
+// CHECK-LABEL: "\01??0?$t at Uobjc_selector@@@@QAA at XZ"
+




More information about the cfe-commits mailing list