compnerd created this revision. compnerd added a reviewer: rnk. compnerd added a subscriber: troughton.
Since we are unable to mangle the SwiftCC CC in the function type, provide an additional namespace qualifier to the decorated source of `__swift_cc` which serves as the CC identifier. This is needed to support swift on Windows. 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,6 @@ +// RUN: %clang_cc1 -triple i686-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s + + +void __attribute__((__swiftcall__)) f(void) {} +// CHECK-DAG: @"\01?f@__swift_cc@@YAXXZ" + Index: lib/AST/MicrosoftMangle.cpp =================================================================== --- lib/AST/MicrosoftMangle.cpp +++ lib/AST/MicrosoftMangle.cpp @@ -1050,6 +1050,10 @@ } DC = DC->getParent(); } + + if (const auto *FD = dyn_cast<FunctionDecl>(ND)) + if (FD->getType()->getAs<FunctionType>()->getCallConv() == CC_Swift) + mangleSourceName("__swift_cc"); } void MicrosoftCXXNameMangler::mangleCXXDtorType(CXXDtorType T) { @@ -1959,6 +1963,10 @@ mangleQualifiers(Quals, /*IsMember=*/false); } + // We currently mangle the SwiftCC as `__swift_cc` namespace on the decl. + if (CC == CC_Swift) + CC = CC_C; + mangleCallingConvention(CC); // <return-type> ::= <type>
Index: test/CodeGenCXX/msabi-swiftcall-cc.cpp =================================================================== --- /dev/null +++ test/CodeGenCXX/msabi-swiftcall-cc.cpp @@ -0,0 +1,6 @@ +// RUN: %clang_cc1 -triple i686-unknown-windows-msvc -emit-llvm %s -o - | FileCheck %s + + +void __attribute__((__swiftcall__)) f(void) {} +// CHECK-DAG: @"\01?f@__swift_cc@@YAXXZ" + Index: lib/AST/MicrosoftMangle.cpp =================================================================== --- lib/AST/MicrosoftMangle.cpp +++ lib/AST/MicrosoftMangle.cpp @@ -1050,6 +1050,10 @@ } DC = DC->getParent(); } + + if (const auto *FD = dyn_cast<FunctionDecl>(ND)) + if (FD->getType()->getAs<FunctionType>()->getCallConv() == CC_Swift) + mangleSourceName("__swift_cc"); } void MicrosoftCXXNameMangler::mangleCXXDtorType(CXXDtorType T) { @@ -1959,6 +1963,10 @@ mangleQualifiers(Quals, /*IsMember=*/false); } + // We currently mangle the SwiftCC as `__swift_cc` namespace on the decl. + if (CC == CC_Swift) + CC = CC_C; + mangleCallingConvention(CC); // <return-type> ::= <type>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits