Deleted Added
full compact
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}