[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
diff --git a/llvm/test/tools/llvm-pdbdump/simple-padding-graphical.test b/llvm/test/tools/llvm-pdbdump/simple-padding-graphical.test
index aacb0a3..222349e 100644
--- a/llvm/test/tools/llvm-pdbdump/simple-padding-graphical.test
+++ b/llvm/test/tools/llvm-pdbdump/simple-padding-graphical.test
@@ -71,7 +71,6 @@
 
 ; VFPTR:      struct SimplePadVfptr [sizeof = 8] {
 ; VFPTR-NEXT:   vfptr +0x00 [sizeof=4]
-; VFPTR-NEXT:     [0] &SimplePadVfptr::~SimplePadVfptr
 ; VFPTR-NEXT:   data +0x04 [sizeof=4] int X
 ; VFPTR-NEXT: }
 
@@ -89,15 +88,15 @@
 ; MULTIPLE_INHERIT2:      SimplePadMultiInherit2 [sizeof = 16]
 ; MULTIPLE_INHERIT2-NEXT:   : public SimplePadFields1
 ; MULTIPLE_INHERIT2-NEXT:   , public SimplePadFields2 {
-; MULTIPLE_INHERIT2-NEXT:   base +0x00 [sizeof=4] SimplePadFields1
+; MULTIPLE_INHERIT2-NEXT:   base +0x00 [sizeof=3] SimplePadFields1
 ; MULTIPLE_INHERIT2-NEXT:     data +0x00 [sizeof=1] char A
 ; MULTIPLE_INHERIT2-NEXT:     data +0x01 [sizeof=1] char B
 ; MULTIPLE_INHERIT2-NEXT:     data +0x02 [sizeof=1] char C
-; MULTIPLE_INHERIT2-NEXT:     <padding> (1 bytes)
-; MULTIPLE_INHERIT2-NEXT:   base +0x04 [sizeof=8] SimplePadFields2
+; MULTIPLE_INHERIT2-NEXT:   <padding> (1 bytes)
+; MULTIPLE_INHERIT2-NEXT:   base +0x04 [sizeof=5] SimplePadFields2
 ; MULTIPLE_INHERIT2-NEXT:     data +0x04 [sizeof=4] int Y
 ; MULTIPLE_INHERIT2-NEXT:     data +0x08 [sizeof=1] char X
-; MULTIPLE_INHERIT2-NEXT:     <padding> (3 bytes)
+; MULTIPLE_INHERIT2-NEXT:   <padding> (3 bytes)
 ; MULTIPLE_INHERIT2-NEXT:   data +0x0c [sizeof=4] int X
 ; MULTIPLE_INHERIT2-NEXT: }