25 unsigned NumPublicPaths = 0;
38 if (PathElement.Base->isVirtual())
41 if (NumPublicPaths > 1)
47 PathElement.Base->getType()->getAsCXXRecordDecl());
52 if (NumPublicPaths == 0)
56 if (NumPublicPaths > 1)
73 if (
Base->isVirtual())
81 auto *BaseDecl =
Base->getType()->castAsCXXRecordDecl();
82 return BaseDecl->isEmpty() ||
99 auto *BaseDecl =
Base->getType()->castAsCXXRecordDecl();
100 if (
Base->isVirtual()) {
102 if (!Bases.VirtualBases.insert(BaseDecl).second) {
107 if (Bases.NonVirtualBases.count(BaseDecl))
112 if (!Bases.NonVirtualBases.insert(BaseDecl).second) {
117 if (Bases.VirtualBases.count(BaseDecl))
123 for (
const auto &I : BaseDecl->bases())
134 for (
const auto &I : RD->
bases())
142 return !RecordTy->getDecl()->getDefinitionOrSelf()->isCompleteDefinition();
146 if (
const auto *RecordTy = dyn_cast<RecordType>(Ty)) {
151 if (
const auto *PointerTy = dyn_cast<PointerType>(Ty))
154 if (
const auto *MemberPointerTy = dyn_cast<MemberPointerType>(Ty)) {
156 if (!MemberPointerTy->getMostRecentCXXRecordDecl()->hasDefinition())
168 if (
Type.isConstQualified())
170 if (
Type.isVolatileQualified())
172 if (
Type.isRestrictQualified())
183 if (Proto->isNothrow()) {
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
const ASTRecordLayout & getASTRecordLayout(const RecordDecl *D) const
Get or compute information about the layout of the specified record (struct/union/class) D,...
QualType getFunctionTypeWithExceptionSpec(QualType Orig, const FunctionProtoType::ExceptionSpecInfo &ESI) const
Get a function type and produce the equivalent function type with the specified exception specificati...
ASTRecordLayout - This class contains layout information for one RecordDecl, which is a struct/union/...
CharUnits getBaseClassOffset(const CXXRecordDecl *Base) const
getBaseClassOffset - Get the offset, in chars, for the given base class.
Represents a path from a specific derived class (which is not represented as part of the path) to a p...
BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases...
Represents a base class of a C++ class.
Represents a C++ struct/union/class.
unsigned getNumBases() const
Retrieves the number of base classes of this class.
base_class_iterator bases_begin()
const CXXBaseSpecifier * base_class_const_iterator
Iterator that traverses the base classes of a class.
bool isDynamicClass() const
bool isDerivedFrom(const CXXRecordDecl *Base) const
Determine whether this class is derived from the class Base.
This is an opaque type for sizes expressed in character units.
static CharUnits fromQuantity(QuantityType Quantity)
Construct a CharUnits quantity from a raw integer type.
Represents a prototype with parameter type info, e.g.
A (possibly-)qualified type.
The base class of the type hierarchy.
const T * getAs() const
Member-template getAs<specific type>'.
unsigned extractPBaseFlags(const ASTContext &Ctx, QualType &Type)
Compute the flags for a __pbase_type_info, and remove the corresponding pieces from Type.
@ VMI_NonDiamondRepeat
VMI_NonDiamondRepeat - Class has non-diamond repeated inheritance.
@ VMI_DiamondShaped
VMI_DiamondShaped - Class is diamond shaped.
bool containsIncompleteClassType(QualType Ty)
Returns whether the given type contains an incomplete class type.
bool canUseSingleInheritance(const CXXRecordDecl *RD)
Return whether the given record decl has a "single, public, non-virtual base at offset zero (i....
static bool isIncompleteClassType(const RecordType *RecordTy)
Returns whether the given record type is incomplete.
unsigned computeVMIClassTypeInfoFlags(const CXXRecordDecl *RD)
Compute the value of the flags member in abi::__vmi_class_type_info.
CharUnits computeOffsetHint(ASTContext &Ctx, const CXXRecordDecl *Src, const CXXRecordDecl *Dst)
Compute the src2dst_offset hint as described in the Itanium C++ ABI [2.9.7].
@ PTI_Restrict
PTI_Restrict - Type has restrict qualifier.
@ PTI_Const
PTI_Const - Type has const qualifier.
@ PTI_Noexcept
PTI_TransactionSafe - Pointee is transaction_safe function (C++ TM TS).
@ PTI_Volatile
PTI_Volatile - Type has volatile qualifier.
@ PTI_Incomplete
PTI_Incomplete - Type is incomplete.
@ EST_None
no exception specification
Represents an element in a path from a derived class to a base class.