1 //===----- CGCXXABI.h - Interface to C++ ABIs -------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This provides an abstract class for C++ code generation. Concrete subclasses
11 // of this implement code generation for specific C++ ABIs.
13 //===----------------------------------------------------------------------===//
15 #ifndef CLANG_CODEGEN_CXXABI_H
16 #define CLANG_CODEGEN_CXXABI_H
27 class MemberPointerType;
31 class CodeGenFunction;
35 /// Implements C++ ABI-specific code generation functions.
40 /// Gets the mangle context.
41 virtual MangleContext &getMangleContext() = 0;
44 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
47 const MemberPointerType *MPT);
50 EmitMemberFunctionPointerConversion(CodeGenFunction &CGF,
56 virtual void EmitNullMemberFunctionPointer(CodeGenFunction &CGF,
57 const MemberPointerType *MPT,
61 // Manipulations on constant expressions.
63 /// \brief Returns true if zero-initializing the given type requires
64 /// a constant other than the LLVM null value.
65 virtual bool RequiresNonZeroInitializer(QualType T);
66 virtual bool RequiresNonZeroInitializer(const CXXRecordDecl *D);
68 virtual llvm::Constant *
69 EmitMemberFunctionPointerConversion(llvm::Constant *C,
72 virtual llvm::Constant *
73 EmitNullMemberFunctionPointer(const MemberPointerType *MPT);
75 virtual llvm::Constant *EmitMemberFunctionPointer(const CXXMethodDecl *MD);
76 virtual void EmitMemberFunctionPointer(CodeGenFunction &CGF,
77 const CXXMethodDecl *MD,
82 EmitMemberFunctionPointerComparison(CodeGenFunction &CGF,
85 const MemberPointerType *MPT,
89 EmitMemberFunctionPointerIsNotNull(CodeGenFunction &CGF,
91 const MemberPointerType *MPT);
94 /// Creates an instance of a C++ ABI class.
95 CGCXXABI *CreateARMCXXABI(CodeGenModule &CGM);
96 CGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM);
97 CGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM);