Mangle calling conventions into function pointer types where GCC does
Summary:
GCC 5.1 began mangling these Windows calling conventions into function
types, since they can be used for overloading. They've always been
mangled in the MS ABI, but they are new to the Itanium mangler. Note
that the calling convention doesn't appear as part of the main
declaration, it only appears on function parameter types and other
types.
Fixes PR39860
Reviewers: rjmccall, efriedma
Subscribers: cfe-commits
Differential Revision: https://reviews.llvm.org/D55672
llvm-svn: 349212
diff --git a/clang/lib/AST/ItaniumMangle.cpp b/clang/lib/AST/ItaniumMangle.cpp
index d8d5621..8231ebe 100644
--- a/clang/lib/AST/ItaniumMangle.cpp
+++ b/clang/lib/AST/ItaniumMangle.cpp
@@ -2648,13 +2648,8 @@
case CC_C:
return "";
- case CC_X86StdCall:
- case CC_X86FastCall:
- case CC_X86ThisCall:
case CC_X86VectorCall:
case CC_X86Pascal:
- case CC_Win64:
- case CC_X86_64SysV:
case CC_X86RegCall:
case CC_AAPCS:
case CC_AAPCS_VFP:
@@ -2667,6 +2662,16 @@
// FIXME: we should be mangling all of the above.
return "";
+ case CC_X86StdCall:
+ return "stdcall";
+ case CC_X86FastCall:
+ return "fastcall";
+ case CC_X86ThisCall:
+ return "thiscall";
+ case CC_X86_64SysV:
+ return "sysv_abi";
+ case CC_Win64:
+ return "ms_abi";
case CC_Swift:
return "swiftcall";
}