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
26 class MemberPointerType;
30 class CodeGenFunction;
34 /// Implements C++ ABI-specific code generation functions.
39 /// Gets the mangle context.
40 virtual MangleContext &getMangleContext() = 0;
43 EmitLoadOfMemberFunctionPointer(CodeGenFunction &CGF,
46 const MemberPointerType *MPT);
49 EmitMemberFunctionPointerConversion(CodeGenFunction &CGF,
55 virtual void EmitNullMemberFunctionPointer(CodeGenFunction &CGF,
56 const MemberPointerType *MPT,
60 // Manipulations on constant expressions.
62 /// \brief Returns true if zero-initializing the given type requires
63 /// a constant other than the LLVM null value.
64 virtual bool RequiresNonZeroInitializer(QualType T);
65 virtual bool RequiresNonZeroInitializer(const CXXRecordDecl *D);
67 virtual llvm::Constant *
68 EmitMemberFunctionPointerConversion(llvm::Constant *C,
71 virtual llvm::Constant *
72 EmitNullMemberFunctionPointer(const MemberPointerType *MPT);
75 /// Creates an instance of a C++ ABI class.
76 CGCXXABI *CreateARMCXXABI(CodeGenModule &CGM);
77 CGCXXABI *CreateItaniumCXXABI(CodeGenModule &CGM);
78 CGCXXABI *CreateMicrosoftCXXABI(CodeGenModule &CGM);