Lines Matching defs:Info
41 /// Class - The class for this base info.
50 /// PrimaryVirtualBaseInfo - Holds the base info for the primary virtual base
51 /// of this base info (if one exists).
128 void UpdateEmptyBaseSubobjects(const BaseSubobjectInfo *Info,
155 bool CanPlaceBaseSubobjectAtOffset(const BaseSubobjectInfo *Info,
179 bool CanPlaceBaseAtOffset(const BaseSubobjectInfo *Info,
270 EmptySubobjectMap::CanPlaceBaseSubobjectAtOffset(const BaseSubobjectInfo *Info,
277 if (!CanPlaceSubobjectAtOffset(Info->Class, Offset))
281 const ASTRecordLayout &Layout = Context.getASTRecordLayout(Info->Class);
282 for (const BaseSubobjectInfo *Base : Info->Bases) {
292 if (Info->PrimaryVirtualBaseInfo) {
293 BaseSubobjectInfo *PrimaryVirtualBaseInfo = Info->PrimaryVirtualBaseInfo;
295 if (Info == PrimaryVirtualBaseInfo->Derived) {
303 for (CXXRecordDecl::field_iterator I = Info->Class->field_begin(),
304 E = Info->Class->field_end(); I != E; ++I, ++FieldNo) {
316 void EmptySubobjectMap::UpdateEmptyBaseSubobjects(const BaseSubobjectInfo *Info,
328 AddSubobjectAtOffset(Info->Class, Offset);
331 const ASTRecordLayout &Layout = Context.getASTRecordLayout(Info->Class);
332 for (const BaseSubobjectInfo *Base : Info->Bases) {
340 if (Info->PrimaryVirtualBaseInfo) {
341 BaseSubobjectInfo *PrimaryVirtualBaseInfo = Info->PrimaryVirtualBaseInfo;
343 if (Info == PrimaryVirtualBaseInfo->Derived)
350 for (CXXRecordDecl::field_iterator I = Info->Class->field_begin(),
351 E = Info->Class->field_end(); I != E; ++I, ++FieldNo) {
360 bool EmptySubobjectMap::CanPlaceBaseAtOffset(const BaseSubobjectInfo *Info,
367 if (!CanPlaceBaseSubobjectAtOffset(Info, Offset))
372 UpdateEmptyBaseSubobjects(Info, Offset, Info->Class->isEmpty());
694 /// of the class we're laying out to their base subobject info.
698 /// class we're laying out to their base subobject info.
725 void AddPrimaryVirtualBaseOffsets(const BaseSubobjectInfo *Info,
871 BaseSubobjectInfo *Info;
874 // Check if we already have info about this virtual base.
877 assert(InfoSlot->Class == RD && "Wrong class for virtual base info!");
883 Info = InfoSlot;
885 Info = new (BaseSubobjectInfoAllocator.Allocate()) BaseSubobjectInfo;
888 Info->Class = RD;
889 Info->IsVirtual = IsVirtual;
890 Info->Derived = nullptr;
891 Info->PrimaryVirtualBaseInfo = nullptr;
904 // Now check if we have base subobject info about this primary base.
909 // We did have info about this primary base, and it turns out that it
915 Info->PrimaryVirtualBaseInfo = PrimaryVirtualBaseInfo;
916 PrimaryVirtualBaseInfo->Derived = Info;
928 Info->Bases.push_back(ComputeBaseSubobjectInfo(BaseDecl, IsVirtual, Info));
932 // Traversing the bases must have created the base info for our primary
939 Info->PrimaryVirtualBaseInfo = PrimaryVirtualBaseInfo;
940 PrimaryVirtualBaseInfo->Derived = Info;
943 return Info;
952 // Compute the base subobject info for this base.
953 BaseSubobjectInfo *Info = ComputeBaseSubobjectInfo(BaseDecl, IsVirtual,
961 // Add the base info to the map of non-virtual bases.
964 NonVirtualBaseInfo.insert(std::make_pair(BaseDecl, Info));
992 // Compute base subobject info.
1015 "Did not find base info for non-virtual primary base!");
1051 assert(BaseInfo && "Did not find base info for non-virtual base!");
1069 RecordLayoutBuilder::AddPrimaryVirtualBaseOffsets(const BaseSubobjectInfo *Info,
1072 if (!Info->Class->getNumVBases())
1076 if (Info->PrimaryVirtualBaseInfo) {
1077 assert(Info->PrimaryVirtualBaseInfo->IsVirtual &&
1079 if (Info->PrimaryVirtualBaseInfo->Derived == Info) {
1081 assert(!VBases.count(Info->PrimaryVirtualBaseInfo->Class) &&
1083 VBases.insert(std::make_pair(Info->PrimaryVirtualBaseInfo->Class,
1087 AddPrimaryVirtualBaseOffsets(Info->PrimaryVirtualBaseInfo, Offset);
1092 const ASTRecordLayout &Layout = Context.getASTRecordLayout(Info->Class);
1093 for (const BaseSubobjectInfo *Base : Info->Bases) {
1134 assert(BaseInfo && "Did not find virtual base info!");
2242 /// \brief The size and alignment info of a pointer.
2286 ElementInfo Info;
2287 Info.Alignment = Layout.getAlignment();
2290 Info.Alignment = std::min(Info.Alignment, MaxFieldAlignment);
2296 Alignment = std::max(Alignment, Info.Alignment);
2298 Info.Alignment = std::max(Info.Alignment, Layout.getRequiredAlignment());
2299 Info.Size = Layout.getNonVirtualSize();
2300 return Info;
2308 ElementInfo Info;
2309 std::tie(Info.Size, Info.Alignment) =
2322 Info.Alignment = std::max(Info.Alignment, FieldRequiredAlignment);
2336 Info.Alignment = std::min(Info.Alignment, MaxFieldAlignment);
2338 Info.Alignment = CharUnits::One();
2339 Info.Alignment = std::max(Info.Alignment, FieldRequiredAlignment);
2340 return Info;
2509 ElementInfo Info = getAdjustedElementInfo(BaseLayout);
2521 BaseOffset = Size.RoundUpToAlignment(Info.Alignment);
2539 ElementInfo Info = getAdjustedElementInfo(FD);
2540 Alignment = std::max(Alignment, Info.Alignment);
2543 Size = std::max(Size, Info.Size);
2551 FieldOffset = Size.RoundUpToAlignment(Info.Alignment);
2554 Size = FieldOffset + Info.Size;
2564 ElementInfo Info = getAdjustedElementInfo(FD);
2567 if (Width > Context.toBits(Info.Size))
2568 Width = Context.toBits(Info.Size);
2573 CurrentBitfieldSize == Info.Size && Width <= RemainingBitsInField) {
2579 CurrentBitfieldSize = Info.Size;
2582 Size = std::max(Size, Info.Size);
2586 CharUnits FieldOffset = Size.RoundUpToAlignment(Info.Alignment);
2588 Size = FieldOffset + Info.Size;
2589 Alignment = std::max(Alignment, Info.Alignment);
2590 RemainingBitsInField = Context.toBits(Info.Size) - Width;
2605 ElementInfo Info = getAdjustedElementInfo(FD);
2608 Size = std::max(Size, Info.Size);
2612 CharUnits FieldOffset = Size.RoundUpToAlignment(Info.Alignment);
2615 Alignment = std::max(Alignment, Info.Alignment);
2701 ElementInfo Info = getAdjustedElementInfo(BaseLayout);
2712 BaseOffset = Size.RoundUpToAlignment(Info.Alignment);
3189 const ASTRecordLayout &Info = getASTRecordLayout(RD);
3203 OS << " Size:" << toBits(Info.getSize()) << "\n";
3205 OS << " DataSize:" << toBits(Info.getDataSize()) << "\n";
3206 OS << " Alignment:" << toBits(Info.getAlignment()) << "\n";
3208 for (unsigned i = 0, e = Info.getFieldCount(); i != e; ++i) {
3210 OS << Info.getFieldOffset(i);