diff options
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/AST/CXXABI.h | 5 | ||||
| -rw-r--r-- | clang/lib/AST/ItaniumCXXABI.cpp | 4 | ||||
| -rw-r--r-- | clang/lib/AST/MicrosoftCXXABI.cpp | 8 |
3 files changed, 17 insertions, 0 deletions
diff --git a/clang/lib/AST/CXXABI.h b/clang/lib/AST/CXXABI.h index 4b38d7afb6a..5326cd4826c 100644 --- a/clang/lib/AST/CXXABI.h +++ b/clang/lib/AST/CXXABI.h @@ -15,6 +15,8 @@ #ifndef LLVM_CLANG_AST_CXXABI_H #define LLVM_CLANG_AST_CXXABI_H +#include "clang/AST/Type.h" + namespace clang { class ASTContext; @@ -28,6 +30,9 @@ public: /// Returns the size of a member pointer in multiples of the target /// pointer size. virtual unsigned getMemberPointerSize(const MemberPointerType *MPT) const = 0; + + /// Returns the default calling convention for C++ methods. + virtual CallingConv getDefaultMethodCallConv() const = 0; }; /// Creates an instance of a C++ ABI class. diff --git a/clang/lib/AST/ItaniumCXXABI.cpp b/clang/lib/AST/ItaniumCXXABI.cpp index c3fa4666537..f5f5f438e76 100644 --- a/clang/lib/AST/ItaniumCXXABI.cpp +++ b/clang/lib/AST/ItaniumCXXABI.cpp @@ -35,6 +35,10 @@ public: if (Pointee->isFunctionType()) return 2; return 1; } + + CallingConv getDefaultMethodCallConv() const { + return CC_C; + } }; class ARMCXXABI : public ItaniumCXXABI { diff --git a/clang/lib/AST/MicrosoftCXXABI.cpp b/clang/lib/AST/MicrosoftCXXABI.cpp index 87b77673925..b1f032b897a 100644 --- a/clang/lib/AST/MicrosoftCXXABI.cpp +++ b/clang/lib/AST/MicrosoftCXXABI.cpp @@ -13,6 +13,7 @@ //===----------------------------------------------------------------------===// #include "CXXABI.h" +#include "clang/Basic/TargetInfo.h" #include "clang/AST/ASTContext.h" #include "clang/AST/Type.h" #include "clang/AST/DeclCXX.h" @@ -26,6 +27,13 @@ public: MicrosoftCXXABI(ASTContext &Ctx) : Context(Ctx) { } unsigned getMemberPointerSize(const MemberPointerType *MPT) const; + + CallingConv getDefaultMethodCallConv() const { + if (Context.Target.getTriple().getArch() == llvm::Triple::x86) + return CC_X86ThisCall; + else + return CC_C; + } }; } |

