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