1071cc7deffad608165b1ddd5263e8bf181861520Charles Davis//===----- CXXABI.h - Interface to C++ ABIs ---------------------*- C++ -*-===// 2071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// 3071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// The LLVM Compiler Infrastructure 4071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// 5071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// This file is distributed under the University of Illinois Open Source 6071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// License. See LICENSE.TXT for details. 7071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// 8071cc7deffad608165b1ddd5263e8bf181861520Charles Davis//===----------------------------------------------------------------------===// 9071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// 10071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// This provides an abstract class for C++ AST support. Concrete 11071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// subclasses of this implement AST support for specific C++ ABIs. 12071cc7deffad608165b1ddd5263e8bf181861520Charles Davis// 13071cc7deffad608165b1ddd5263e8bf181861520Charles Davis//===----------------------------------------------------------------------===// 14071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 15071cc7deffad608165b1ddd5263e8bf181861520Charles Davis#ifndef LLVM_CLANG_AST_CXXABI_H 16071cc7deffad608165b1ddd5263e8bf181861520Charles Davis#define LLVM_CLANG_AST_CXXABI_H 17071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 18424ae9882e8a6eecc9dfe7c2d8623e72b2563873Charles Davis#include "clang/AST/Type.h" 19424ae9882e8a6eecc9dfe7c2d8623e72b2563873Charles Davis 20071cc7deffad608165b1ddd5263e8bf181861520Charles Davisnamespace clang { 21071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 22071cc7deffad608165b1ddd5263e8bf181861520Charles Davisclass ASTContext; 23071cc7deffad608165b1ddd5263e8bf181861520Charles Davisclass MemberPointerType; 24071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 25071cc7deffad608165b1ddd5263e8bf181861520Charles Davis/// Implements C++ ABI-specific semantic analysis functions. 26071cc7deffad608165b1ddd5263e8bf181861520Charles Davisclass CXXABI { 27071cc7deffad608165b1ddd5263e8bf181861520Charles Davispublic: 28071cc7deffad608165b1ddd5263e8bf181861520Charles Davis virtual ~CXXABI(); 29071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 30071cc7deffad608165b1ddd5263e8bf181861520Charles Davis /// Returns the size of a member pointer in multiples of the target 31071cc7deffad608165b1ddd5263e8bf181861520Charles Davis /// pointer size. 32071cc7deffad608165b1ddd5263e8bf181861520Charles Davis virtual unsigned getMemberPointerSize(const MemberPointerType *MPT) const = 0; 33424ae9882e8a6eecc9dfe7c2d8623e72b2563873Charles Davis 34424ae9882e8a6eecc9dfe7c2d8623e72b2563873Charles Davis /// Returns the default calling convention for C++ methods. 358f88a1dcc57cfe8580eb1558a783ad8499bfe8e0Timur Iskhodzhanov virtual CallingConv getDefaultMethodCallConv(bool isVariadic) const = 0; 36dae0cb52e4e3d46bbfc9a4510909522197a92e54Anders Carlsson 37dae0cb52e4e3d46bbfc9a4510909522197a92e54Anders Carlsson // Returns whether the given class is nearly empty, with just virtual pointers 38dae0cb52e4e3d46bbfc9a4510909522197a92e54Anders Carlsson // and no data except possibly virtual bases. 39dae0cb52e4e3d46bbfc9a4510909522197a92e54Anders Carlsson virtual bool isNearlyEmpty(const CXXRecordDecl *RD) const = 0; 40071cc7deffad608165b1ddd5263e8bf181861520Charles Davis}; 41071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 42071cc7deffad608165b1ddd5263e8bf181861520Charles Davis/// Creates an instance of a C++ ABI class. 43ee79a4c30e5d1c5285551c9a25b8ec6d45d46aa7John McCallCXXABI *CreateARMCXXABI(ASTContext &Ctx); 44071cc7deffad608165b1ddd5263e8bf181861520Charles DavisCXXABI *CreateItaniumCXXABI(ASTContext &Ctx); 45071cc7deffad608165b1ddd5263e8bf181861520Charles DavisCXXABI *CreateMicrosoftCXXABI(ASTContext &Ctx); 46071cc7deffad608165b1ddd5263e8bf181861520Charles Davis} 47071cc7deffad608165b1ddd5263e8bf181861520Charles Davis 48071cc7deffad608165b1ddd5263e8bf181861520Charles Davis#endif 49