From a98ee586bf6f396b2b6a7deeef24db87bb6736b2 Mon Sep 17 00:00:00 2001 From: Zachary Turner Date: Fri, 14 Sep 2018 22:29:19 +0000 Subject: [PATCH] [PDB] Make the pretty dumper output modified types. Currently if we got something like `const Foo` we'd ignore it and just rely on printing the unmodified `Foo` later on. However, for testing the native reading code we really would like to be able to see these so that we can verify that the native reader can actually handle them. Instead of printing out the full type though, just print out the header. llvm-svn: 342295 --- .../include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h | 1 + llvm/test/DebugInfo/PDB/Inputs/every-type.cpp | 15 + llvm/test/DebugInfo/PDB/Inputs/every-type.pdb | Bin 102400 -> 102400 bytes llvm/test/DebugInfo/PDB/Inputs/every-type.yaml | 22 +- .../DebugInfo/PDB/Native/pdb-native-enums.test | 18 +- llvm/test/DebugInfo/PDB/every-type.test | 410 ++++++++++----------- .../llvm-pdbutil/PrettyClassDefinitionDumper.cpp | 7 + llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp | 12 + llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp | 21 +- 9 files changed, 285 insertions(+), 221 deletions(-) diff --git a/llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h b/llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h index d8afba6..f463047 100644 --- a/llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h +++ b/llvm/include/llvm/DebugInfo/PDB/PDBSymbolTypeEnum.h @@ -34,6 +34,7 @@ public: FORWARD_SYMBOL_METHOD(hasNestedTypes) FORWARD_SYMBOL_METHOD(getLength) FORWARD_SYMBOL_ID_METHOD(getLexicalParent) + FORWARD_SYMBOL_ID_METHOD(getUnmodifiedType) FORWARD_SYMBOL_METHOD(getName) FORWARD_SYMBOL_METHOD(getSrcLineOnTypeDefn) FORWARD_SYMBOL_METHOD(isNested) diff --git a/llvm/test/DebugInfo/PDB/Inputs/every-type.cpp b/llvm/test/DebugInfo/PDB/Inputs/every-type.cpp index ed715b0..338f8ea 100644 --- a/llvm/test/DebugInfo/PDB/Inputs/every-type.cpp +++ b/llvm/test/DebugInfo/PDB/Inputs/every-type.cpp @@ -4,10 +4,12 @@ void *__purecall = 0; void __cdecl operator delete(void *,unsigned int) {} +void __cdecl operator delete(void *,unsigned __int64) {} struct FooStruct { }; // LF_STRUCTURE class FooClass { // LF_CLASS +public: // LF_FIELDLIST enum NestedEnum { // LF_ENUM // LF_NESTTYPE @@ -50,6 +52,15 @@ union TheUnion { int SomeArray[7] = {1, 2, 3, 4, 5, 6, 7}; // LF_ARRAY +template +void Reference(T &t) { } + +const volatile FooStruct FS; // LF_MODIFIER with struct +const volatile FooClass FC; // LF_MODIFIER with class +const volatile TheUnion TU; // LF_MODIFIER with union +const volatile FooClass::NestedEnum FCNE = FooClass::A; // LF_MODIFIER with enum + + int main(int argc, char **argv) { // LF_PROCEDURE const int X = 7; // LF_MODIFIER @@ -59,5 +70,9 @@ int main(int argc, char **argv) { // LF_PROCEDURE VInherit VInheritInstance; IVInherit IVInheritInstance; TheUnion UnionInstance; + Reference(FS); // LF_MODIFIER with struct + Reference(FC); // LF_MODIFIER with class + Reference(TU); // LF_MODIFIER with union + Reference(FCNE); // LF_MODIFIER with enum return SomeArray[argc]; } diff --git a/llvm/test/DebugInfo/PDB/Inputs/every-type.pdb b/llvm/test/DebugInfo/PDB/Inputs/every-type.pdb index 64996d61d3e7265a755be3c3ec245d57718305e7..e70f0d74847ac6288393bca593491b9171bf65fa 100644 GIT binary patch literal 102400 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 diff --git a/llvm/test/DebugInfo/PDB/Inputs/every-type.yaml b/llvm/test/DebugInfo/PDB/Inputs/every-type.yaml index 8f23e8a..191c490 100644 --- a/llvm/test/DebugInfo/PDB/Inputs/every-type.yaml +++ b/llvm/test/DebugInfo/PDB/Inputs/every-type.yaml @@ -222,7 +222,7 @@ TpiStream: VBPtrType: 0x1001 # const int * VBPtrOffset: 0 VTableIndex: 1 - # class Inherit : public FooClass {}; [Index: 0x1014] + # struct Inherit : public FooClass {}; [Index: 0x1014] - Kind: LF_STRUCTURE Class: MemberCount: 1 @@ -242,6 +242,26 @@ TpiStream: DerivationList: 0x1012 VTableShape: 0 Size: 4 + # const volatile enum FooClass::Enum : uint32_t { [Index: 0x1016] + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 0x100D + Modifiers: [ Const, Volatile ] + # const volatile struct Inherit : public FooClass {} { [Index: 0x1017] + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 0x1014 + Modifiers: [ Const, Volatile ] + # const volatile class FooClass { [Index: 0x1018] + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 0x100F + Modifiers: [ Const, Volatile ] + # const volatile interface FooInterface { [Index: 0x1019] + - Kind: LF_MODIFIER + Modifier: + ModifiedType: 0x1011 + Modifiers: [ Const, Volatile ] # // Member type records. These are generally not length prefixed, and appear # // inside of a field list record. diff --git a/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test b/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test index f175a87..ed2eb69 100644 --- a/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test +++ b/llvm/test/DebugInfo/PDB/Native/pdb-native-enums.test @@ -12,7 +12,7 @@ DUMP-NEXT: symIndexId: 2 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::event_sourceAttribute::type_e +DUMP-NEXT: name: FooClass::NestedEnum DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -36,7 +36,7 @@ DUMP-NEXT: symIndexId: 4 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::event_sourceAttribute::optimize_e +DUMP-NEXT: name: __vc_attributes::event_sourceAttribute::type_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -60,7 +60,7 @@ DUMP-NEXT: symIndexId: 5 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::helper_attributes::v1_alttypeAttribute::type_e +DUMP-NEXT: name: __vc_attributes::event_sourceAttribute::optimize_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -84,7 +84,7 @@ DUMP-NEXT: symIndexId: 6 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::helper_attributes::usageAttribute::usage_e +DUMP-NEXT: name: __vc_attributes::helper_attributes::v1_alttypeAttribute::type_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -108,7 +108,7 @@ DUMP-NEXT: symIndexId: 7 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::threadingAttribute::threading_e +DUMP-NEXT: name: __vc_attributes::helper_attributes::usageAttribute::usage_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -132,7 +132,7 @@ DUMP-NEXT: symIndexId: 8 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::aggregatableAttribute::type_e +DUMP-NEXT: name: __vc_attributes::threadingAttribute::threading_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -156,7 +156,7 @@ DUMP-NEXT: symIndexId: 9 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::event_receiverAttribute::type_e +DUMP-NEXT: name: __vc_attributes::aggregatableAttribute::type_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -180,7 +180,7 @@ DUMP-NEXT: symIndexId: 10 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: __vc_attributes::moduleAttribute::type_e +DUMP-NEXT: name: __vc_attributes::event_receiverAttribute::type_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 @@ -204,7 +204,7 @@ DUMP-NEXT: symIndexId: 11 DUMP-NEXT: symTag: 12 DUMP-NEXT: baseType: 6 DUMP-NEXT: lexicalParentId: 0 -DUMP-NEXT: name: FooClass::NestedEnum +DUMP-NEXT: name: __vc_attributes::moduleAttribute::type_e DUMP-NEXT: typeId: 3 DUMP-NEXT: length: 4 DUMP-NEXT: constructor: 0 diff --git a/llvm/test/DebugInfo/PDB/every-type.test b/llvm/test/DebugInfo/PDB/every-type.test index e6b9c15..f188c74 100644 --- a/llvm/test/DebugInfo/PDB/every-type.test +++ b/llvm/test/DebugInfo/PDB/every-type.test @@ -8,254 +8,252 @@ we claim to understand. We then test this in two ways: hasn't changed. -RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \ +RUN: llvm-pdbutil dump -type-index=0x101A,0x102C,0x103D,0x104D,0x1098,0x10AA,0x10AC \ RUN: -dependents %p/Inputs/every-type.pdb | FileCheck --check-prefix=TYPES %s RUN: llvm-pdbutil pdb2yaml -tpi-stream -ipi-stream %p/Inputs/every-type.pdb > %t.pdb.yaml RUN: llvm-pdbutil yaml2pdb -pdb=%t.yaml.pdb %t.pdb.yaml -RUN: llvm-pdbutil dump -type-index=0x1018,0x102A,0x103B,0x1093,0x1095,0x1096,0x1098 \ +RUN: llvm-pdbutil dump -type-index=0x101A,0x102C,0x103D,0x104D,0x1098,0x10AA,0x10AC \ RUN: -dependents %t.yaml.pdb | FileCheck --check-prefix=TYPES %s TYPES: Types (TPI Stream) TYPES-NEXT: ============================================================ -TYPES-NEXT: Showing 7 records and their dependents (73 records total) -TYPES-NEXT: 0x1005 | LF_MODIFIER [size = 12] +TYPES-NEXT: Showing 7 records and their dependents (72 records total) +TYPES-NEXT: 0x1007 | LF_MODIFIER [size = 12] TYPES-NEXT: referent = 0x0074 (int), modifiers = const -TYPES-NEXT: 0x1006 | LF_CLASS [size = 48] `FooClass` +TYPES-NEXT: 0x1008 | LF_CLASS [size = 48] `FooClass` TYPES-NEXT: unique name: `.?AVFooClass@@` TYPES-NEXT: vtable: , base list: , field list: -TYPES-NEXT: options: forward ref | has unique name -TYPES-NEXT: 0x1007 | LF_VTSHAPE [size = 8] -TYPES-NEXT: 0x1008 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1007, mode = pointer, opts = None, kind = ptr32 -TYPES-NEXT: 0x1009 | LF_CLASS [size = 44] `Inherit` +TYPES-NEXT: options: forward ref | has unique name, sizeof 0 +TYPES-NEXT: 0x1009 | LF_VTSHAPE [size = 8] +TYPES-NEXT: 0x100A | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1009, mode = pointer, opts = None, kind = ptr64 +TYPES-NEXT: 0x100B | LF_CLASS [size = 44] `Inherit` TYPES-NEXT: unique name: `.?AVInherit@@` TYPES-NEXT: vtable: , base list: , field list: -TYPES-NEXT: options: forward ref | has unique name -TYPES-NEXT: 0x100A | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1009, mode = pointer, opts = const, kind = ptr32 -TYPES-NEXT: 0x100B | LF_ARGLIST [size = 8] -TYPES-NEXT: 0x100C | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B -TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x100D | LF_MODIFIER [size = 12] -TYPES-NEXT: referent = 0x1009, modifiers = const -TYPES-NEXT: 0x100E | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x100D, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x100F | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x100E: `const Inherit&` -TYPES-NEXT: 0x1010 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x100F -TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor -TYPES-NEXT: 0x1011 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B -TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor -TYPES-NEXT: 0x1012 | LF_METHODLIST [size = 20] -TYPES-NEXT: - Method [type = 0x1010, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1011, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: 0x1013 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1009, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x1014 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x1013, # args = 1, param list = 0x100F -TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1015 | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x0075 (unsigned): `unsigned` +TYPES-NEXT: options: forward ref | has unique name, sizeof 0 +TYPES-NEXT: 0x100C | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x100B, mode = pointer, opts = const, kind = ptr64 +TYPES-NEXT: 0x100D | LF_ARGLIST [size = 8] +TYPES-NEXT: 0x100E | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D +TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x100F | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x100B, modifiers = const +TYPES-NEXT: 0x1010 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x100F, mode = ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1011 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1010: `const Inherit&` +TYPES-NEXT: 0x1012 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1011 +TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor +TYPES-NEXT: 0x1013 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D +TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor +TYPES-NEXT: 0x1014 | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1012, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1013, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1015 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x100B, mode = ref, opts = None, kind = ptr64 TYPES-NEXT: 0x1016 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0403 (void*), # args = 1, param list = 0x1015 -TYPES-NEXT: class type = 0x1009, this type = 0x100A, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1017 | LF_FIELDLIST [size = 152] +TYPES-NEXT: return type = 0x1015, # args = 1, param list = 0x1011 +TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1017 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x0075 (unsigned): `unsigned` +TYPES-NEXT: 0x1018 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0603 (void*), # args = 1, param list = 0x1017 +TYPES-NEXT: class type = 0x100B, this type = 0x100C, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1019 | LF_FIELDLIST [size = 152] TYPES-NEXT: - LF_BCLASS -TYPES-NEXT: type = 0x1006, offset = 4, attrs = public -TYPES-NEXT: - LF_VFUNCTAB type = 0x1008 +TYPES-NEXT: type = 0x1008, offset = 8, attrs = public +TYPES-NEXT: - LF_VFUNCTAB type = 0x100A TYPES-NEXT: - LF_ONEMETHOD [name = `~Inherit`] -TYPES-NEXT: type = 0x100C, vftable offset = 0, attrs = public intro virtual -TYPES-NEXT: - LF_METHOD [name = `Inherit`, # overloads = 2, overload list = 0x1012] +TYPES-NEXT: type = 0x100E, vftable offset = 0, attrs = public intro virtual +TYPES-NEXT: - LF_METHOD [name = `Inherit`, # overloads = 2, overload list = 0x1014] TYPES-NEXT: - LF_ONEMETHOD [name = `operator=`] -TYPES-NEXT: type = 0x1014, vftable offset = -1, attrs = public compiler-generated +TYPES-NEXT: type = 0x1016, vftable offset = -1, attrs = public compiler-generated TYPES-NEXT: - LF_ONEMETHOD [name = `__local_vftable_ctor_closure`] -TYPES-NEXT: type = 0x100C, vftable offset = -1, attrs = public compiler-generated +TYPES-NEXT: type = 0x100E, vftable offset = -1, attrs = public compiler-generated TYPES-NEXT: - LF_ONEMETHOD [name = `__vecDelDtor`] -TYPES-NEXT: type = 0x1016, vftable offset = 0, attrs = public intro virtual compiler-generated -TYPES-NEXT: 0x1018 | LF_CLASS [size = 44] `Inherit` +TYPES-NEXT: type = 0x1018, vftable offset = 0, attrs = public intro virtual compiler-generated +TYPES-NEXT: 0x101A | LF_CLASS [size = 44] `Inherit` TYPES-NEXT: unique name: `.?AVInherit@@` -TYPES-NEXT: vtable: 0x1007, base list: , field list: 0x1017 -TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= -TYPES-NEXT: 0x1019 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1005, mode = pointer, opts = None, kind = ptr32 -TYPES-NEXT: 0x101A | LF_CLASS [size = 48] `VInherit` +TYPES-NEXT: vtable: 0x1009, base list: , field list: 0x1019 +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16 +TYPES-NEXT: 0x101B | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1007, mode = pointer, opts = None, kind = ptr64 +TYPES-NEXT: 0x101C | LF_CLASS [size = 48] `VInherit` TYPES-NEXT: unique name: `.?AVVInherit@@` TYPES-NEXT: vtable: , base list: , field list: -TYPES-NEXT: options: forward ref | has unique name -TYPES-NEXT: 0x101B | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x101A, mode = pointer, opts = const, kind = ptr32 -TYPES-NEXT: 0x101C | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x101A, mode = rvalue ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x101D | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x101C: `VInherit&&` -TYPES-NEXT: 0x101E | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x101D -TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x101F | LF_MODIFIER [size = 12] -TYPES-NEXT: referent = 0x101A, modifiers = const -TYPES-NEXT: 0x1020 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x101F, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x1021 | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x1020: `const VInherit&` -TYPES-NEXT: 0x1022 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1021 -TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x1023 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B -TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x1024 | LF_METHODLIST [size = 28] -TYPES-NEXT: - Method [type = 0x101E, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1022, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1023, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: 0x1025 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x101A, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x1026 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x101D -TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1027 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x1025, # args = 1, param list = 0x1021 -TYPES-NEXT: class type = 0x101A, this type = 0x101B, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1028 | LF_METHODLIST [size = 20] -TYPES-NEXT: - Method [type = 0x1026, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1027, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: 0x1029 | LF_FIELDLIST [size = 60] +TYPES-NEXT: options: forward ref | has unique name, sizeof 0 +TYPES-NEXT: 0x101D | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101C, mode = pointer, opts = const, kind = ptr64 +TYPES-NEXT: 0x101E | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101C, mode = rvalue ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x101F | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x101E: `VInherit&&` +TYPES-NEXT: 0x1020 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x101F +TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1021 | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x101C, modifiers = const +TYPES-NEXT: 0x1022 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1021, mode = ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1023 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1022: `const VInherit&` +TYPES-NEXT: 0x1024 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1023 +TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1025 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D +TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1026 | LF_METHODLIST [size = 28] +TYPES-NEXT: - Method [type = 0x1020, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1024, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1025, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1027 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x101C, mode = ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1028 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1027, # args = 1, param list = 0x101F +TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1029 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1027, # args = 1, param list = 0x1023 +TYPES-NEXT: class type = 0x101C, this type = 0x101D, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x102A | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1028, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1029, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x102B | LF_FIELDLIST [size = 60] TYPES-NEXT: - LF_VBCLASS -TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1 +TYPES-NEXT: base = 0x1008, vbptr = 0x101B, vbptr offset = 0, vtable index = 1 TYPES-NEXT: attrs = public -TYPES-NEXT: - LF_METHOD [name = `VInherit`, # overloads = 3, overload list = 0x1024] -TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1028] -TYPES-NEXT: 0x102A | LF_CLASS [size = 48] `VInherit` +TYPES-NEXT: - LF_METHOD [name = `VInherit`, # overloads = 3, overload list = 0x1026] +TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x102A] +TYPES-NEXT: 0x102C | LF_CLASS [size = 48] `VInherit` TYPES-NEXT: unique name: `.?AVVInherit@@` -TYPES-NEXT: vtable: , base list: , field list: 0x1029 -TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= -TYPES-NEXT: 0x102B | LF_CLASS [size = 48] `IVInherit` +TYPES-NEXT: vtable: , base list: , field list: 0x102B +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16 +TYPES-NEXT: 0x102D | LF_CLASS [size = 48] `IVInherit` TYPES-NEXT: unique name: `.?AVIVInherit@@` TYPES-NEXT: vtable: , base list: , field list: -TYPES-NEXT: options: forward ref | has unique name -TYPES-NEXT: 0x102C | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x102B, mode = pointer, opts = const, kind = ptr32 -TYPES-NEXT: 0x102D | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x102B, mode = rvalue ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x102E | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x102D: `IVInherit&&` -TYPES-NEXT: 0x102F | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x102E -TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x1030 | LF_MODIFIER [size = 12] -TYPES-NEXT: referent = 0x102B, modifiers = const -TYPES-NEXT: 0x1031 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1030, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x1032 | LF_ARGLIST [size = 12] -TYPES-NEXT: 0x1031: `const IVInherit&` -TYPES-NEXT: 0x1033 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1032 -TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x1034 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B -TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = constructor with virtual bases | constructor -TYPES-NEXT: 0x1035 | LF_METHODLIST [size = 28] -TYPES-NEXT: - Method [type = 0x102F, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1033, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1034, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: 0x1036 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x102B, mode = ref, opts = None, kind = ptr32 -TYPES-NEXT: 0x1037 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x102E -TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1038 | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x1036, # args = 1, param list = 0x1032 -TYPES-NEXT: class type = 0x102B, this type = 0x102C, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x1039 | LF_METHODLIST [size = 20] -TYPES-NEXT: - Method [type = 0x1037, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: - Method [type = 0x1038, vftable offset = -1, attrs = public compiler-generated] -TYPES-NEXT: 0x103A | LF_FIELDLIST [size = 72] +TYPES-NEXT: options: forward ref | has unique name, sizeof 0 +TYPES-NEXT: 0x102E | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102D, mode = pointer, opts = const, kind = ptr64 +TYPES-NEXT: 0x102F | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102D, mode = rvalue ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1030 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x102F: `IVInherit&&` +TYPES-NEXT: 0x1031 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1030 +TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1032 | LF_MODIFIER [size = 12] +TYPES-NEXT: referent = 0x102D, modifiers = const +TYPES-NEXT: 0x1033 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1032, mode = ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1034 | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1033: `const IVInherit&` +TYPES-NEXT: 0x1035 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1034 +TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1036 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D +TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = constructor with virtual bases | constructor +TYPES-NEXT: 0x1037 | LF_METHODLIST [size = 28] +TYPES-NEXT: - Method [type = 0x1031, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1035, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x1036, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x1038 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x102D, mode = ref, opts = None, kind = ptr64 +TYPES-NEXT: 0x1039 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1038, # args = 1, param list = 0x1030 +TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x103A | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x1038, # args = 1, param list = 0x1034 +TYPES-NEXT: class type = 0x102D, this type = 0x102E, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x103B | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1039, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: - Method [type = 0x103A, vftable offset = -1, attrs = public compiler-generated] +TYPES-NEXT: 0x103C | LF_FIELDLIST [size = 72] TYPES-NEXT: - LF_BCLASS -TYPES-NEXT: type = 0x101A, offset = 0, attrs = public +TYPES-NEXT: type = 0x101C, offset = 0, attrs = public TYPES-NEXT: - LF_IVBCLASS -TYPES-NEXT: base = 0x1006, vbptr = 0x1019, vbptr offset = 0, vtable index = 1 +TYPES-NEXT: base = 0x1008, vbptr = 0x101B, vbptr offset = 0, vtable index = 1 TYPES-NEXT: attrs = public -TYPES-NEXT: - LF_METHOD [name = `IVInherit`, # overloads = 3, overload list = 0x1035] -TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x1039] -TYPES-NEXT: 0x103B | LF_CLASS [size = 48] `IVInherit` +TYPES-NEXT: - LF_METHOD [name = `IVInherit`, # overloads = 3, overload list = 0x1037] +TYPES-NEXT: - LF_METHOD [name = `operator=`, # overloads = 2, overload list = 0x103B] +TYPES-NEXT: 0x103D | LF_CLASS [size = 48] `IVInherit` TYPES-NEXT: unique name: `.?AVIVInherit@@` -TYPES-NEXT: vtable: , base list: , field list: 0x103A -TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator= -TYPES-NEXT: 0x1087 | LF_FIELDLIST [size = 28] +TYPES-NEXT: vtable: , base list: , field list: 0x103C +TYPES-NEXT: options: has ctor / dtor | has unique name | overloaded operator | overloaded operator=, sizeof 16 +TYPES-NEXT: 0x1041 | LF_FIELDLIST [size = 28] TYPES-NEXT: - LF_ENUMERATE [A = 0] TYPES-NEXT: - LF_ENUMERATE [B = 1] TYPES-NEXT: - LF_ENUMERATE [C = 2] -TYPES-NEXT: 0x1088 | LF_ENUM [size = 64] `FooClass::NestedEnum` +TYPES-NEXT: 0x1042 | LF_ENUM [size = 64] `FooClass::NestedEnum` TYPES-NEXT: unique name: `.?AW4NestedEnum@FooClass@@` -TYPES-NEXT: field list: 0x1087, underlying type: 0x0074 (int) +TYPES-NEXT: field list: 0x1041, underlying type: 0x0074 (int) TYPES-NEXT: options: has unique name | is nested -TYPES-NEXT: 0x1089 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1006, mode = pointer, opts = const, kind = ptr32 -TYPES-NEXT: 0x108A | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B -TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x108B | LF_ARGLIST [size = 16] +TYPES-NEXT: 0x1043 | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x1008, mode = pointer, opts = const, kind = ptr64 +TYPES-NEXT: 0x1044 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D +TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1045 | LF_ARGLIST [size = 16] TYPES-NEXT: 0x0074 (int): `int` TYPES-NEXT: 0x0074 (int): `int` -TYPES-NEXT: 0x108C | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x108B -TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x108D | LF_ARGLIST [size = 12] +TYPES-NEXT: 0x1046 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 2, param list = 0x1045 +TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1047 | LF_ARGLIST [size = 12] TYPES-NEXT: 0x0074 (int): `int` -TYPES-NEXT: 0x108E | LF_MFUNCTION [size = 28] -TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x108D -TYPES-NEXT: class type = 0x1006, this type = 0x1089, this adjust = 0 -TYPES-NEXT: calling conv = thiscall, options = None -TYPES-NEXT: 0x108F | LF_METHODLIST [size = 20] -TYPES-NEXT: - Method [type = 0x108C, vftable offset = -1, attrs = private] -TYPES-NEXT: - Method [type = 0x108E, vftable offset = -1, attrs = private] -TYPES-NEXT: 0x1090 | LF_BITFIELD [size = 12] +TYPES-NEXT: 0x1048 | LF_MFUNCTION [size = 28] +TYPES-NEXT: return type = 0x0003 (void), # args = 1, param list = 0x1047 +TYPES-NEXT: class type = 0x1008, this type = 0x1043, this adjust = 0 +TYPES-NEXT: calling conv = cdecl, options = None +TYPES-NEXT: 0x1049 | LF_METHODLIST [size = 20] +TYPES-NEXT: - Method [type = 0x1046, vftable offset = -1, attrs = public] +TYPES-NEXT: - Method [type = 0x1048, vftable offset = -1, attrs = public] +TYPES-NEXT: 0x104A | LF_BITFIELD [size = 12] TYPES-NEXT: type = 0x0074 (int), bit offset = 0, # bits = 4 -TYPES-NEXT: 0x1091 | LF_BITFIELD [size = 12] +TYPES-NEXT: 0x104B | LF_BITFIELD [size = 12] TYPES-NEXT: type = 0x0074 (int), bit offset = 4, # bits = 4 -TYPES-NEXT: 0x1092 | LF_FIELDLIST [size = 164] -TYPES-NEXT: - LF_NESTTYPE [name = `NestedEnum`, parent = 0x1088] +TYPES-NEXT: 0x104C | LF_FIELDLIST [size = 164] +TYPES-NEXT: - LF_NESTTYPE [name = `NestedEnum`, parent = 0x1042] TYPES-NEXT: - LF_ONEMETHOD [name = `RegularMethod`] -TYPES-NEXT: type = 0x108A, vftable offset = -1, attrs = private -TYPES-NEXT: - LF_METHOD [name = `OverloadedMethod`, # overloads = 2, overload list = 0x108F] -TYPES-NEXT: - LF_MEMBER [name = `HiNibble`, Type = 0x1090, offset = 0, attrs = private] -TYPES-NEXT: - LF_MEMBER [name = `LoNibble`, Type = 0x1091, offset = 0, attrs = private] -TYPES-NEXT: - LF_MEMBER [name = `EnumVariable`, Type = 0x1088, offset = 4, attrs = private] -TYPES-NEXT: - LF_STMEMBER [name = `StaticMember`, type = 0x0403 (void*), attrs = private] -TYPES-NEXT: 0x1093 | LF_CLASS [size = 48] `FooClass` +TYPES-NEXT: type = 0x1044, vftable offset = -1, attrs = public +TYPES-NEXT: - LF_METHOD [name = `OverloadedMethod`, # overloads = 2, overload list = 0x1049] +TYPES-NEXT: - LF_MEMBER [name = `HiNibble`, Type = 0x104A, offset = 0, attrs = public] +TYPES-NEXT: - LF_MEMBER [name = `LoNibble`, Type = 0x104B, offset = 0, attrs = public] +TYPES-NEXT: - LF_MEMBER [name = `EnumVariable`, Type = 0x1042, offset = 4, attrs = public] +TYPES-NEXT: - LF_STMEMBER [name = `StaticMember`, type = 0x0603 (void*), attrs = public] +TYPES-NEXT: 0x104D | LF_CLASS [size = 48] `FooClass` TYPES-NEXT: unique name: `.?AVFooClass@@` -TYPES-NEXT: vtable: , base list: , field list: 0x1092 -TYPES-NEXT: options: contains nested class | has unique name -TYPES-NEXT: 0x1094 | LF_FIELDLIST [size = 16] -TYPES-NEXT: - LF_MEMBER [name = `X`, Type = 0x0074 (int), offset = 0, attrs = public] -TYPES-NEXT: 0x1095 | LF_UNION [size = 40] `TheUnion` +TYPES-NEXT: vtable: , base list: , field list: 0x104C +TYPES-NEXT: options: contains nested class | has unique name, sizeof 8 +TYPES-NEXT: 0x1098 | LF_UNION [size = 40] `TheUnion` TYPES-NEXT: unique name: `.?ATTheUnion@@` -TYPES-NEXT: field list: 0x1094 -TYPES-NEXT: options: has unique name | sealed -TYPES-NEXT: 0x1096 | LF_PROCEDURE [size = 16] -TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100B +TYPES-NEXT: field list: +TYPES-NEXT: options: forward ref | has unique name, sizeof 0 +TYPES-NEXT: 0x10AA | LF_PROCEDURE [size = 16] +TYPES-NEXT: return type = 0x0003 (void), # args = 0, param list = 0x100D TYPES-NEXT: calling conv = cdecl, options = None -TYPES-NEXT: 0x1097 | LF_POINTER [size = 12] -TYPES-NEXT: referent = 0x1096, mode = pointer, opts = const, kind = ptr32 -TYPES-NEXT: 0x1098 | LF_ARRAY [size = 16] -TYPES-NEXT: size: 4, index type: 0x0022 (unsigned long), element type: 0x1097 +TYPES-NEXT: 0x10AB | LF_POINTER [size = 12] +TYPES-NEXT: referent = 0x10AA, mode = pointer, opts = const, kind = ptr64 +TYPES-NEXT: 0x10AC | LF_ARRAY [size = 16] +TYPES-NEXT: size: 8, index type: 0x0023 (unsigned __int64), element type: 0x10AB diff --git a/llvm/tools/llvm-pdbutil/PrettyClassDefinitionDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyClassDefinitionDumper.cpp index 651cb8b..f009f53 100644 --- a/llvm/tools/llvm-pdbutil/PrettyClassDefinitionDumper.cpp +++ b/llvm/tools/llvm-pdbutil/PrettyClassDefinitionDumper.cpp @@ -51,6 +51,13 @@ void ClassDefinitionDumper::prettyPrintClassIntro(const ClassLayout &Layout) { uint32_t Size = Layout.getSize(); const PDBSymbolTypeUDT &Class = Layout.getClass(); + if (Layout.getClass().isConstType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; + if (Layout.getClass().isVolatileType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; + if (Layout.getClass().isUnalignedType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned "; + WithColor(Printer, PDB_ColorItem::Keyword).get() << Class.getUdtKind() << " "; WithColor(Printer, PDB_ColorItem::Type).get() << Class.getName(); WithColor(Printer, PDB_ColorItem::Comment).get() << " [sizeof = " << Size diff --git a/llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp index bf22e75e..f4cbd3f 100644 --- a/llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp +++ b/llvm/tools/llvm-pdbutil/PrettyEnumDumper.cpp @@ -23,6 +23,18 @@ using namespace llvm::pdb; EnumDumper::EnumDumper(LinePrinter &P) : PDBSymDumper(true), Printer(P) {} void EnumDumper::start(const PDBSymbolTypeEnum &Symbol) { + if (Symbol.getUnmodifiedTypeId() != 0) { + if (Symbol.isConstType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; + if (Symbol.isVolatileType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; + if (Symbol.isUnalignedType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned "; + WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; + WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName(); + return; + } + WithColor(Printer, PDB_ColorItem::Keyword).get() << "enum "; WithColor(Printer, PDB_ColorItem::Type).get() << Symbol.getName(); if (!opts::pretty::NoEnumDefs) { diff --git a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp index 663a608..8eea4c2 100644 --- a/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp +++ b/llvm/tools/llvm-pdbutil/PrettyTypeDumper.cpp @@ -196,11 +196,22 @@ void TypeDumper::start(const PDBSymbolExe &Exe) { dumpClassLayout(*Class); } else { while (auto Class = Classes->getNext()) { - if (Class->getUnmodifiedTypeId() != 0) + if (Printer.IsTypeExcluded(Class->getName(), Class->getLength())) continue; - if (Printer.IsTypeExcluded(Class->getName(), Class->getLength())) + if (Class->getUnmodifiedTypeId() != 0) { + Printer.NewLine(); + if (Class->isConstType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "const "; + if (Class->isVolatileType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "volatile "; + if (Class->isUnalignedType()) + WithColor(Printer, PDB_ColorItem::Keyword).get() << "unaligned "; + WithColor(Printer, PDB_ColorItem::Keyword).get() + << Class->getUdtKind() << " "; + WithColor(Printer, PDB_ColorItem::Type).get() << Class->getName(); continue; + } auto Layout = llvm::make_unique(std::move(Class)); if (Layout->deepPaddingSize() < opts::pretty::PaddingThreshold) @@ -244,9 +255,9 @@ void TypeDumper::dumpClassLayout(const ClassLayout &Class) { assert(opts::pretty::Classes); if (opts::pretty::ClassFormat == opts::pretty::ClassDefinitionFormat::None) { - Printer.NewLine(); - WithColor(Printer, PDB_ColorItem::Keyword).get() << "class "; - WithColor(Printer, PDB_ColorItem::Identifier).get() << Class.getName(); + WithColor(Printer, PDB_ColorItem::Keyword).get() + << Class.getClass().getUdtKind() << " "; + WithColor(Printer, PDB_ColorItem::Type).get() << Class.getName(); } else { ClassDefinitionDumper Dumper(Printer); Dumper.start(Class); -- 2.7.4