MicrosoftCXXABI.cpp revision 212904
1//===------- MicrosoftCXXABI.cpp - AST support for the Microsoft C++ ABI --===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This provides C++ AST support targetting the Microsoft Visual C++
11// ABI.
12//
13//===----------------------------------------------------------------------===//
14
15#include "CXXABI.h"
16#include "clang/AST/ASTContext.h"
17#include "clang/AST/Type.h"
18#include "clang/AST/DeclCXX.h"
19
20using namespace clang;
21
22namespace {
23class MicrosoftCXXABI : public CXXABI {
24  ASTContext &Context;
25public:
26  MicrosoftCXXABI(ASTContext &Ctx) : Context(Ctx) { }
27
28  unsigned getMemberPointerSize(const MemberPointerType *MPT) const;
29};
30}
31
32unsigned MicrosoftCXXABI::getMemberPointerSize(const MemberPointerType *MPT) const {
33  QualType Pointee = MPT->getPointeeType();
34  CXXRecordDecl *RD = MPT->getClass()->getAsCXXRecordDecl();
35  if (RD->getNumVBases() > 0) {
36    if (Pointee->isFunctionType())
37      return 3;
38    else
39      return 2;
40  } else if (RD->getNumBases() > 1 && Pointee->isFunctionType())
41    return 2;
42  return 1;
43}
44
45CXXABI *clang::CreateMicrosoftCXXABI(ASTContext &Ctx) {
46  return new MicrosoftCXXABI(Ctx);
47}
48
49