1212795Sdim//===----- CXXABI.h - Interface to C++ ABIs ---------------------*- C++ -*-===// 2212795Sdim// 3212795Sdim// The LLVM Compiler Infrastructure 4212795Sdim// 5212795Sdim// This file is distributed under the University of Illinois Open Source 6212795Sdim// License. See LICENSE.TXT for details. 7212795Sdim// 8212795Sdim//===----------------------------------------------------------------------===// 9212795Sdim// 10212795Sdim// This provides an abstract class for C++ AST support. Concrete 11212795Sdim// subclasses of this implement AST support for specific C++ ABIs. 12212795Sdim// 13212795Sdim//===----------------------------------------------------------------------===// 14212795Sdim 15212795Sdim#ifndef LLVM_CLANG_AST_CXXABI_H 16212795Sdim#define LLVM_CLANG_AST_CXXABI_H 17212795Sdim 18218893Sdim#include "clang/AST/Type.h" 19218893Sdim 20212795Sdimnamespace clang { 21212795Sdim 22212795Sdimclass ASTContext; 23212795Sdimclass MemberPointerType; 24212795Sdim 25212795Sdim/// Implements C++ ABI-specific semantic analysis functions. 26212795Sdimclass CXXABI { 27212795Sdimpublic: 28212795Sdim virtual ~CXXABI(); 29212795Sdim 30249423Sdim /// Returns the width and alignment of a member pointer in bits. 31249423Sdim virtual std::pair<uint64_t, unsigned> 32249423Sdim getMemberPointerWidthAndAlign(const MemberPointerType *MPT) const = 0; 33218893Sdim 34218893Sdim /// Returns the default calling convention for C++ methods. 35239462Sdim virtual CallingConv getDefaultMethodCallConv(bool isVariadic) const = 0; 36218893Sdim 37218893Sdim // Returns whether the given class is nearly empty, with just virtual pointers 38218893Sdim // and no data except possibly virtual bases. 39218893Sdim virtual bool isNearlyEmpty(const CXXRecordDecl *RD) const = 0; 40212795Sdim}; 41212795Sdim 42212795Sdim/// Creates an instance of a C++ ABI class. 43212795SdimCXXABI *CreateARMCXXABI(ASTContext &Ctx); 44212795SdimCXXABI *CreateItaniumCXXABI(ASTContext &Ctx); 45212795SdimCXXABI *CreateMicrosoftCXXABI(ASTContext &Ctx); 46212795Sdim} 47212795Sdim 48212795Sdim#endif 49