summaryrefslogtreecommitdiffstats
path: root/llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp
diff options
context:
space:
mode:
authorZachary Turner <zturner@google.com>2017-04-24 17:47:24 +0000
committerZachary Turner <zturner@google.com>2017-04-24 17:47:24 +0000
commit1690164cac96cf3670f380a74b27443c71b6a32e (patch)
tree199cc2fd16d66ae9664d50afbfdf01eb536276a5 /llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp
parentcadadabb7664407be7553363e1a580f92d681548 (diff)
downloadbcm5719-llvm-1690164cac96cf3670f380a74b27443c71b6a32e.tar.gz
bcm5719-llvm-1690164cac96cf3670f380a74b27443c71b6a32e.zip
[llvm-pdbdump] Re-write the record layout code to be more resilient.
This reworks the way virtual bases are handled, and also the way padding is detected across multiple levels of aggregates, producing a much more accurate result. llvm-svn: 301203
Diffstat (limited to 'llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp')
-rw-r--r--llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp b/llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp
index 02f31108b0d..ccfd38c1e3c 100644
--- a/llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp
+++ b/llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp
@@ -59,14 +59,17 @@ bool PrettyClassLayoutTextDumper::start(const ClassLayout &Layout) {
NextUnusedByte = UseMap.find_next_unset(Off);
}
}
- LayoutItem->getSymbol().dump(*this);
+ if (auto Sym = LayoutItem->getSymbol())
+ Sym->dump(*this);
}
- if (NextUnusedByte >= 0 && Layout.getClassSize() > 1) {
- uint32_t Amount = Layout.getClassSize() - NextUnusedByte;
- Printer.NewLine();
- WithColor(Printer, PDB_ColorItem::Padding).get() << "<padding> (" << Amount
- << " bytes)";
+ if (NextUnusedByte >= 0 && Layout.getSize() > 1) {
+ uint32_t Amount = Layout.getSize() - NextUnusedByte;
+ if (Amount > 0) {
+ Printer.NewLine();
+ WithColor(Printer, PDB_ColorItem::Padding).get() << "<padding> ("
+ << Amount << " bytes)";
+ }
DumpedAnything = true;
}
@@ -116,4 +119,6 @@ void PrettyClassLayoutTextDumper::dump(const PDBSymbolTypeTypedef &Symbol) {
Dumper.start(Symbol);
}
+void PrettyClassLayoutTextDumper::dump(const PDBSymbolTypeBuiltin &Symbol) {}
+
void PrettyClassLayoutTextDumper::dump(const PDBSymbolTypeUDT &Symbol) {}
OpenPOWER on IntegriCloud