RecordLayout.cpp (205219) | RecordLayout.cpp (208600) |
---|---|
1//===-- RecordLayout.cpp - Layout information for a struct/union -*- C++ -*-==// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 30 unchanged lines hidden (view full) --- 39// Constructor for C++ records. 40ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, 41 uint64_t size, unsigned alignment, 42 uint64_t datasize, 43 const uint64_t *fieldoffsets, 44 unsigned fieldcount, 45 uint64_t nonvirtualsize, 46 unsigned nonvirtualalign, | 1//===-- RecordLayout.cpp - Layout information for a struct/union -*- C++ -*-==// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// --- 30 unchanged lines hidden (view full) --- 39// Constructor for C++ records. 40ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, 41 uint64_t size, unsigned alignment, 42 uint64_t datasize, 43 const uint64_t *fieldoffsets, 44 unsigned fieldcount, 45 uint64_t nonvirtualsize, 46 unsigned nonvirtualalign, |
47 const PrimaryBaseInfo &PrimaryBase, | 47 uint64_t SizeOfLargestEmptySubobject, 48 const CXXRecordDecl *PrimaryBase, 49 bool PrimaryBaseIsVirtual, |
48 const BaseOffsetsMapTy& BaseOffsets, 49 const BaseOffsetsMapTy& VBaseOffsets) 50 : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment), 51 FieldCount(fieldcount), CXXInfo(new (Ctx) CXXRecordLayoutInfo) 52{ 53 if (FieldCount > 0) { 54 FieldOffsets = new (Ctx) uint64_t[FieldCount]; 55 memcpy(FieldOffsets, fieldoffsets, FieldCount * sizeof(*FieldOffsets)); 56 } 57 | 50 const BaseOffsetsMapTy& BaseOffsets, 51 const BaseOffsetsMapTy& VBaseOffsets) 52 : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment), 53 FieldCount(fieldcount), CXXInfo(new (Ctx) CXXRecordLayoutInfo) 54{ 55 if (FieldCount > 0) { 56 FieldOffsets = new (Ctx) uint64_t[FieldCount]; 57 memcpy(FieldOffsets, fieldoffsets, FieldCount * sizeof(*FieldOffsets)); 58 } 59 |
58 CXXInfo->PrimaryBase = PrimaryBase; | 60 CXXInfo->PrimaryBase = PrimaryBaseInfo(PrimaryBase, PrimaryBaseIsVirtual); |
59 CXXInfo->NonVirtualSize = nonvirtualsize; 60 CXXInfo->NonVirtualAlign = nonvirtualalign; | 61 CXXInfo->NonVirtualSize = nonvirtualsize; 62 CXXInfo->NonVirtualAlign = nonvirtualalign; |
63 CXXInfo->SizeOfLargestEmptySubobject = SizeOfLargestEmptySubobject; |
|
61 CXXInfo->BaseOffsets = BaseOffsets; 62 CXXInfo->VBaseOffsets = VBaseOffsets; 63 64#ifndef NDEBUG 65 if (const CXXRecordDecl *PrimaryBase = getPrimaryBase()) { 66 if (getPrimaryBaseWasVirtual()) 67 assert(getVBaseClassOffset(PrimaryBase) == 0 && 68 "Primary virtual base must be at offset 0!"); 69 else 70 assert(getBaseClassOffset(PrimaryBase) == 0 && 71 "Primary base must be at offset 0!"); 72 } 73#endif 74} | 64 CXXInfo->BaseOffsets = BaseOffsets; 65 CXXInfo->VBaseOffsets = VBaseOffsets; 66 67#ifndef NDEBUG 68 if (const CXXRecordDecl *PrimaryBase = getPrimaryBase()) { 69 if (getPrimaryBaseWasVirtual()) 70 assert(getVBaseClassOffset(PrimaryBase) == 0 && 71 "Primary virtual base must be at offset 0!"); 72 else 73 assert(getBaseClassOffset(PrimaryBase) == 0 && 74 "Primary base must be at offset 0!"); 75 } 76#endif 77} |