[llvm-pdbdump] Add an option to dump full class definitions.

This adds the --class-definitions flag.  If specified, when dumping
types, instead of "class Foo" you will see the full class definition,
with member functions, constructors, access specifiers.

NOTE: Using this option can be very slow, as generating a full class
definition requires accessing many different parts of the PDB.

llvm-svn: 230203
diff --git a/llvm/test/DebugInfo/PDB/Inputs/symbolformat.cpp b/llvm/test/DebugInfo/PDB/Inputs/symbolformat.cpp
index 1aa8652..c069a35 100644
--- a/llvm/test/DebugInfo/PDB/Inputs/symbolformat.cpp
+++ b/llvm/test/DebugInfo/PDB/Inputs/symbolformat.cpp
@@ -5,20 +5,49 @@
 
 int __cdecl _purecall(void) { return 0; }
 
+enum TestEnum {
+  Value,
+  Value10 = 10
+};
+
+enum class TestEnumClass {
+  Value,
+  Value10 = 10
+};
+
 struct A {
   virtual void PureFunc() = 0 {}
   virtual void VirtualFunc() {}
   void RegularFunc() {}
 };
 
-struct B : public A {
-  void PureFunc() override {}
+struct VirtualBase {
 };
 
+struct B : public A, protected virtual VirtualBase {
+  void PureFunc() override {}
+
+  enum NestedEnum {
+    FirstVal,
+    SecondVal
+  };
+
+  typedef int NestedTypedef;
+  NestedEnum EnumVar;
+  NestedTypedef TypedefVar;
+};
+
+typedef int IntType;
+typedef A ClassAType;
+
 int main(int argc, char **argv) {
   B b;
   auto PureAddr = &B::PureFunc;
   auto VirtualAddr = &A::PureFunc;
   auto RegularAddr = &A::RegularFunc;
+  TestEnum Enum = Value;
+  TestEnumClass EnumClass = TestEnumClass::Value10;
+  IntType Int = 12;
+  ClassAType *ClassA = &b;
   return 0;
 }