//===--- VTableBuilder.h - C++ vtable layout builder --------------*- C++ -*-=// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This contains code dealing with generation of the layout of virtual tables. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_AST_VTABLEBUILDER_H #define LLVM_CLANG_AST_VTABLEBUILDER_H #include "clang/AST/BaseSubobject.h" #include "clang/AST/CXXInheritance.h" #include "clang/AST/GlobalDecl.h" #include "clang/AST/RecordLayout.h" #include "clang/Basic/ABI.h" #include "clang/Basic/Thunk.h" #include "llvm/ADT/DenseMap.h" #include <memory> #include <utility> namespace clang { class CXXRecordDecl; /// Represents a single component in a vtable. class VTableComponent { … }; class VTableLayout { … }; class VTableContextBase { … }; class ItaniumVTableContext : public VTableContextBase { … }; /// Holds information about the inheritance path to a virtual base or function /// table pointer. A record may contain as many vfptrs or vbptrs as there are /// base subobjects. struct VPtrInfo { … }; VPtrInfoVector; /// All virtual base related information about a given record decl. Includes /// information on all virtual base tables and the path components that are used /// to mangle them. struct VirtualBaseInfo { … }; struct MethodVFTableLocation { … }; class MicrosoftVTableContext : public VTableContextBase { … }; } // namespace clang #endif