diff options
author | Zachary Turner <zturner@google.com> | 2017-04-24 17:47:24 +0000 |
---|---|---|
committer | Zachary Turner <zturner@google.com> | 2017-04-24 17:47:24 +0000 |
commit | 1690164cac96cf3670f380a74b27443c71b6a32e (patch) | |
tree | 199cc2fd16d66ae9664d50afbfdf01eb536276a5 /llvm/tools/llvm-pdbdump/PrettyClassLayoutTextDumper.cpp | |
parent | cadadabb7664407be7553363e1a580f92d681548 (diff) | |
download | bcm5719-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.cpp | 17 |
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) {} |