summaryrefslogtreecommitdiffstats
path: root/clang/lib/AST
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/AST')
-rw-r--r--clang/lib/AST/ItaniumCXXABI.cpp4
-rw-r--r--clang/lib/AST/MicrosoftCXXABI.cpp6
-rw-r--r--clang/lib/AST/RecordLayout.cpp2
-rw-r--r--clang/lib/AST/RecordLayoutBuilder.cpp7
4 files changed, 12 insertions, 7 deletions
diff --git a/clang/lib/AST/ItaniumCXXABI.cpp b/clang/lib/AST/ItaniumCXXABI.cpp
index ca1fffa0621..bed02b4c001 100644
--- a/clang/lib/AST/ItaniumCXXABI.cpp
+++ b/clang/lib/AST/ItaniumCXXABI.cpp
@@ -52,7 +52,9 @@ public:
return false;
const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
- return Layout.getNonVirtualSize() == Context.Target.getPointerWidth(0);
+ CharUnits PointerSize =
+ Context.toCharUnitsFromBits(Context.Target.getPointerWidth(0));
+ return Layout.getNonVirtualSize() == PointerSize;
}
};
diff --git a/clang/lib/AST/MicrosoftCXXABI.cpp b/clang/lib/AST/MicrosoftCXXABI.cpp
index c4259f43a71..4de93bb4bea 100644
--- a/clang/lib/AST/MicrosoftCXXABI.cpp
+++ b/clang/lib/AST/MicrosoftCXXABI.cpp
@@ -44,8 +44,10 @@ public:
const ASTRecordLayout &Layout = Context.getASTRecordLayout(RD);
// In the Microsoft ABI, classes can have one or two vtable pointers.
- return Layout.getNonVirtualSize() == Context.Target.getPointerWidth(0) ||
- Layout.getNonVirtualSize() == Context.Target.getPointerWidth(0) * 2;
+ CharUnits PointerSize =
+ Context.toCharUnitsFromBits(Context.Target.getPointerWidth(0));
+ return Layout.getNonVirtualSize() == PointerSize ||
+ Layout.getNonVirtualSize() == PointerSize * 2;
}
};
}
diff --git a/clang/lib/AST/RecordLayout.cpp b/clang/lib/AST/RecordLayout.cpp
index e027c1ab8d4..cdecff66f8f 100644
--- a/clang/lib/AST/RecordLayout.cpp
+++ b/clang/lib/AST/RecordLayout.cpp
@@ -45,7 +45,7 @@ ASTRecordLayout::ASTRecordLayout(const ASTContext &Ctx,
uint64_t datasize,
const uint64_t *fieldoffsets,
unsigned fieldcount,
- uint64_t nonvirtualsize,
+ CharUnits nonvirtualsize,
unsigned nonvirtualalign,
CharUnits SizeOfLargestEmptySubobject,
const CXXRecordDecl *PrimaryBase,
diff --git a/clang/lib/AST/RecordLayoutBuilder.cpp b/clang/lib/AST/RecordLayoutBuilder.cpp
index 8c62ffdcdf0..7e15dcce37c 100644
--- a/clang/lib/AST/RecordLayoutBuilder.cpp
+++ b/clang/lib/AST/RecordLayoutBuilder.cpp
@@ -1115,7 +1115,8 @@ CharUnits RecordLayoutBuilder::LayoutBase(const BaseSubobjectInfo *Base) {
if (!Base->Class->isEmpty()) {
// Update the data size.
- DataSize = Offset + Layout.getNonVirtualSize();
+ DataSize = Offset +
+ (Layout.getNonVirtualSize().getQuantity() * Context.getCharWidth());
Size = std::max(Size, DataSize);
} else
@@ -1665,7 +1666,7 @@ ASTContext::getASTRecordLayout(const RecordDecl *D) const {
new (*this) ASTRecordLayout(*this, Builder->Size, Builder->Alignment,
DataSize, Builder->FieldOffsets.data(),
Builder->FieldOffsets.size(),
- NonVirtualSize,
+ toCharUnitsFromBits(NonVirtualSize),
Builder->NonVirtualAlignment,
EmptySubobjects.SizeOfLargestEmptySubobject,
Builder->PrimaryBase,
@@ -1834,7 +1835,7 @@ static void DumpCXXRecordLayout(llvm::raw_ostream &OS,
OS << " sizeof=" << Layout.getSize() / 8;
OS << ", dsize=" << Layout.getDataSize() / 8;
OS << ", align=" << Layout.getAlignment() / 8 << '\n';
- OS << " nvsize=" << Layout.getNonVirtualSize() / 8;
+ OS << " nvsize=" << Layout.getNonVirtualSize().getQuantity();
OS << ", nvalign=" << Layout.getNonVirtualAlign() / 8 << '\n';
OS << '\n';
}
OpenPOWER on IntegriCloud