[PATCH] D42768: AST: add an extension to support SwiftCC on MS ABI

Saleem Abdulrasool via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 31 21:35:11 PST 2018


compnerd updated this revision to Diff 132324.
compnerd added a comment.

Handle pointers as well


Repository:
  rC Clang

https://reviews.llvm.org/D42768

Files:
  lib/AST/MicrosoftMangle.cpp
  test/CodeGenCXX/msabi-swiftcall-cc.cpp


Index: test/CodeGenCXX/msabi-swiftcall-cc.cpp
===================================================================
--- /dev/null
+++ test/CodeGenCXX/msabi-swiftcall-cc.cpp
@@ -0,0 +1,7 @@
+// RUN: %clang_cc1 -triple i686-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s
+
+void __attribute__((__swiftcall__)) f(void) {}
+// CHECK-DAG: @"\01?f at __swift_cc@__Swift@@YAXXZ"
+
+void (__attribute__((__swiftcall__)) *p)(void);
+// CHECK-DAG: @"\01?p at __swift_cc@__Swift@@3P6AXXZA"
Index: lib/AST/MicrosoftMangle.cpp
===================================================================
--- lib/AST/MicrosoftMangle.cpp
+++ lib/AST/MicrosoftMangle.cpp
@@ -1050,6 +1050,20 @@
     }
     DC = DC->getParent();
   }
+
+  const Type *Ty = nullptr;
+
+  if (const auto *FD = dyn_cast<FunctionDecl>(ND))
+    Ty = FD->getType()->getAs<FunctionType>();
+
+  if (const auto *VD = dyn_cast<VarDecl>(ND))
+    if (VD->getType()->isPointerType())
+      Ty = VD->getType()->getPointeeType()->getAs<FunctionType>();
+
+  if (Ty)
+    if (Ty->getAs<FunctionType>()->getCallConv() == CC_Swift)
+      for (const char *NS : {"__swift_cc", "__Swift"})
+        mangleSourceName(NS);
 }

 void MicrosoftCXXNameMangler::mangleCXXDtorType(CXXDtorType T) {
@@ -1959,6 +1973,11 @@
     mangleQualifiers(Quals, /*IsMember=*/false);
   }

+  // We currently mangle the SwiftCC as `__Swift::__swift_cc` namespace on the
+  // decl in mangleNestedName.
+  if (CC == CC_Swift)
+    CC = CC_C;
+
   mangleCallingConvention(CC);

   // <return-type> ::= <type>


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42768.132324.patch
Type: text/x-patch
Size: 1528 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20180201/e526de64/attachment.bin>


More information about the cfe-commits mailing list