[llvm] r365515 - Rename llvm/test/tools/llvm-pdbdump to llvm/test/tools/llvm-pdbutil

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 9 10:14:24 PDT 2019


Author: nico
Date: Tue Jul  9 10:14:24 2019
New Revision: 365515

URL: http://llvm.org/viewvc/llvm-project?rev=365515&view=rev
Log:
Rename llvm/test/tools/llvm-pdbdump to llvm/test/tools/llvm-pdbutil

llvm-pdbdump was renamed to llvm-pdbutil long ago. This updates the test
to be where you'd expect them to be.

Added:
    llvm/trunk/test/tools/llvm-pdbutil/
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/FPOTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/InjectedSource.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/Stripped.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.cpp
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.pdb   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/Inputs/tpi.bin   (with props)
    llvm/trunk/test/tools/llvm-pdbutil/checksum-string.test
    llvm/trunk/test/tools/llvm-pdbutil/class-layout.test
    llvm/trunk/test/tools/llvm-pdbutil/complex-padding-graphical.test
    llvm/trunk/test/tools/llvm-pdbutil/enum-layout.test
    llvm/trunk/test/tools/llvm-pdbutil/explain-dbi-stream.test
    llvm/trunk/test/tools/llvm-pdbutil/explain-pdb-stream.test
    llvm/trunk/test/tools/llvm-pdbutil/explain.test
    llvm/trunk/test/tools/llvm-pdbutil/export-stream.test
    llvm/trunk/test/tools/llvm-pdbutil/fpo-data.test
    llvm/trunk/test/tools/llvm-pdbutil/injected-sources.test
    llvm/trunk/test/tools/llvm-pdbutil/lit.local.cfg
    llvm/trunk/test/tools/llvm-pdbutil/load-address.test
    llvm/trunk/test/tools/llvm-pdbutil/partial-type-stream.test
    llvm/trunk/test/tools/llvm-pdbutil/pretty-func-dumper.test
    llvm/trunk/test/tools/llvm-pdbutil/regex-filter.test
    llvm/trunk/test/tools/llvm-pdbutil/simple-padding-graphical.test
    llvm/trunk/test/tools/llvm-pdbutil/stripped.test
    llvm/trunk/test/tools/llvm-pdbutil/symbol-filters.test
    llvm/trunk/test/tools/llvm-pdbutil/type-qualifiers.test
    llvm/trunk/test/tools/llvm-pdbutil/type-server-no-dbi.test
    llvm/trunk/test/tools/llvm-pdbutil/usingnamespace.test
Removed:
    llvm/trunk/test/tools/llvm-pdbdump/

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,64 @@
+// Compile with "cl /c /Zi /GR- ClassLayoutTest.cpp"
+// Link with "link ClassLayoutTest.obj /debug /nodefaultlib /entry:main"
+
+namespace MembersTest {
+  class A {
+  public:
+    typedef int NestedTypedef;
+    enum NestedEnum {
+      NestedEnumValue1
+    };
+
+    void MemberFunc() {}
+
+  private:
+    int IntMemberVar;
+    double DoubleMemberVar;
+  };
+}
+
+namespace GlobalsTest {
+  int IntVar;
+  double DoubleVar;
+  
+  typedef int Typedef;
+  enum Enum {
+    Val1
+  } EnumVar;
+  Typedef TypedefVar;
+}
+
+namespace BaseClassTest {
+  class A {};
+  class B : public virtual A {};
+  class C : public virtual A {};
+  class D : protected B, private C {};
+}
+
+namespace UdtKindTest {
+  struct A {};
+  class B {};
+  union C {};
+}
+
+namespace BitFieldTest {
+  struct A {
+    int Bits1 : 1;
+    int Bits2 : 2;
+    int Bits3 : 3;
+    int Bits4 : 4;
+    int Bits22 : 22;
+    int Offset0x04;
+  };
+};
+
+int main(int argc, char **argv) {
+  MembersTest::A v1;
+  v1.MemberFunc();
+  BaseClassTest::D v2;
+  UdtKindTest::A v3;
+  UdtKindTest::B v4;
+  UdtKindTest::C v5;
+  BitFieldTest::A v7;
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ClassLayoutTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,48 @@
+// Compile with "cl /c /Zi /GR- ComplexPaddingTest.cpp"
+// Link with "link ComplexPaddingTest.obj /debug /nodefaultlib /entry:main"
+
+#include <stdint.h>
+
+extern "C" using at_exit_handler = void();
+
+int atexit(at_exit_handler handler) { return 0; }
+
+struct TestVB {
+  static void operator delete(void *ptr, size_t sz) {}
+  virtual ~TestVB() {}
+  virtual void IntroFunction1() {}
+  int X;
+} A;
+
+struct TestNVB {
+  static void operator delete(void *ptr, size_t sz) {}
+  virtual ~TestNVB() {}
+  virtual void IntroFunction2() {}
+  int Y;
+} B;
+
+struct TestVBLayout
+    : public virtual TestVB,
+      public TestNVB {
+  static void operator delete(void *ptr, size_t sz) {}
+  int Z;
+} C;
+
+struct TestIVBBase : public virtual TestVB {
+  int A;
+} D;
+
+struct TestIVBDerived : public TestIVBBase {
+  int B;
+} E;
+
+struct TestIVBMergedDerived
+    : public virtual TestVB,
+      public TestIVBBase {
+  int B;
+} F;
+
+int main(int argc, char **argv) {
+
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/ComplexPaddingTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/FPOTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/FPOTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/FPOTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,47 @@
+// Compile with "cl /c /Zi /GR- FilterTest.cpp"
+// Link with "link FilterTest.obj /debug /nodefaultlib /entry:main"
+
+class FilterTestClass {
+public:
+  typedef int NestedTypedef;
+  enum NestedEnum {
+    NestedEnumValue1
+  };
+
+  void MemberFunc() {}
+
+  int foo() const { return IntMemberVar; }
+
+private:
+  int IntMemberVar;
+  double DoubleMemberVar;
+};
+
+int IntGlobalVar;
+double DoubleGlobalVar;
+typedef int GlobalTypedef;
+char OneByte;
+char TwoBytes[2];
+char ThreeBytes[3];
+
+enum GlobalEnum {
+  GlobalEnumVal1
+} GlobalEnumVar;
+
+int CFunc() {
+  return (int)OneByte * 2;
+}
+int BFunc() {
+  return 42;
+}
+int AFunc() {
+  static FilterTestClass FC;
+
+  return (CFunc() + BFunc()) * IntGlobalVar + FC.foo();
+}
+
+int main(int argc, char **argv) {
+  FilterTestClass TestClass;
+  GlobalTypedef v1;
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/FilterTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/InjectedSource.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/InjectedSource.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/InjectedSource.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,6 @@
+// Compile with "cl /c /Zi /GR- LoadAddressTest.cpp"
+// Link with "link LoadAddressTest.obj /debug /nodefaultlib /entry:main"
+
+int main(int argc, char **argv) {
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/LoadAddressTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,49 @@
+// Compile for x86 (FPO disabled)
+// Compile with "cl /c /Zi /GR- PrettyFuncDumperTest.cpp"
+// Link with "link PrettyFuncDumperTest.obj /debug /nodefaultlib /entry:main"
+
+typedef void (*FuncPtrA)();
+FuncPtrA FuncVarA;
+
+typedef float (*FuncPtrB)(void);
+FuncPtrB FuncVarB;
+
+typedef int(*VariadicFuncPtrTypedef)(char, double, ...);
+VariadicFuncPtrTypedef VariadicFuncVar;
+
+void Func(int array[]) { return; }
+
+template <int N=1, class ...T>
+void TemplateFunc(T ...Arg) {
+  return;
+}
+
+namespace {
+  void Func(int& a, const double b, volatile bool c) { return; }
+}
+
+namespace NS {
+  void Func(char a, int b, ...) {
+    return;
+  }
+}
+
+namespace MemberFuncsTest {
+  class A {
+  public:
+    int FuncA() { return 1; }
+    void FuncB(int a, ...) {}
+  };
+}
+
+int main() {
+  MemberFuncsTest::A v1;
+  v1.FuncA();
+  v1.FuncB(9, 10, 20);
+
+  NS::Func('c', 2, 10, 100);
+
+  TemplateFunc(10);
+  TemplateFunc(10, 11, 88);
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/PrettyFuncDumperTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,168 @@
+// Compile with "cl /c /Zi /GR- SimplePaddingTest.cpp"
+// Link with "link SimplePaddingTest.obj /debug /nodefaultlib /entry:main"
+
+#include <stdint.h>
+
+extern "C" using at_exit_handler = void();
+
+int atexit(at_exit_handler handler) { return 0; }
+
+struct SimplePadNoPadding {
+  int32_t X;
+  int32_t Y;
+  // No padding anywhere, sizeof(T) = 8
+} A;
+
+struct SimplePadUnion {
+  union {
+    int32_t X;
+    int64_t Y;
+    struct {
+      int32_t X;
+      // 4 bytes of padding here
+      int64_t Y;
+    } Z;
+  };
+  // Since the padding occurs at a location that is occupied by other storage
+  // (namely the Y member), the storage will still be considered used, and so
+  // there will be no unused bytes in the larger class.  But in the debug
+  // info for the nested struct, we should see padding.
+  // sizeof(SimplePadUnion) == sizeof(Z) == 16
+} B;
+
+struct SimplePadNoPadding2 {
+  bool A;
+  bool B;
+  bool C;
+  bool D;
+  // No padding anywhere, sizeof(T) = 4
+} C;
+
+struct alignas(4) SimplePadFields1 {
+  char A;
+  char B;
+  char C;
+  // 1 byte of padding here, sizeof(T) = 4
+} E;
+
+struct SimplePadFields2 {
+  int32_t Y;
+  char X;
+} F;
+
+struct SimplePadBase {
+  // Make sure this class is 4 bytes, and the derived class requires 8 byte
+  // alignment, so that padding is inserted between base and derived.
+  int32_t X;
+  // No padding here
+} G;
+
+struct SimplePadDerived : public SimplePadBase {
+  // 4 bytes of padding here due to Y requiring 8 byte alignment.
+  // Thus, sizeof(T) = 16
+  int64_t Y;
+} H;
+
+struct SimplePadEmptyBase1 {};
+struct SimplePadEmptyBase2 {};
+
+struct SimplePadEmpty : public SimplePadEmptyBase1, SimplePadEmptyBase2 {
+  // Bases have to occupy at least 1 byte of storage, so this requires
+  // 2 bytes of padding, plus 1 byte for each base, yielding sizeof(T) = 8
+  int32_t X;
+} I;
+
+struct SimplePadVfptr {
+  virtual ~SimplePadVfptr() {}
+  static void operator delete(void *ptr, size_t sz) {}
+  int32_t X;
+} J;
+
+struct NonEmptyBase1 {
+  bool X;
+};
+
+struct NonEmptyBase2 {
+  bool Y;
+};
+
+struct SimplePadMultiInherit : public NonEmptyBase1, public NonEmptyBase2 {
+  // X and Y from the 2 bases will get squished together, leaving 2 bytes
+  // of padding necessary for proper alignment of an int32.
+  // Therefore, sizeof(T) = 2 + 2 + 4 = 8
+  int32_t X;
+} K;
+
+struct SimplePadMultiInherit2 : public SimplePadFields1, SimplePadFields2 {
+  // There should be 1 byte of padding after the first class, and
+  // 3 bytes of padding after the second class.
+  int32_t X;
+} L;
+
+struct OneLevelInherit : public NonEmptyBase1 {
+  short Y;
+};
+
+struct SimplePadTwoLevelInherit : public OneLevelInherit {
+  // OneLevelInherit has nested padding because of its base,
+  // and then padding again because of this class.  So each
+  // class should be 4 bytes, yielding sizeof(T) = 12.
+  int64_t Z;
+} M;
+
+struct SimplePadAggregate {
+  NonEmptyBase1 X;
+  int32_t Y;
+  // the presence of X will cause 3 bytes of padding to be injected.
+  SimplePadFields1 Fields;
+} N;
+
+struct SimplePadVtable1 {
+  static void operator delete(void *ptr, size_t sz) {}
+  virtual ~SimplePadVtable1() {}
+  virtual void A1() {}
+  virtual void B1() {}
+} O;
+
+struct SimplePadVtable2 {
+  static void operator delete(void *ptr, size_t sz) {}
+  virtual ~SimplePadVtable2() {}
+  virtual void X2() {}
+  virtual void Y2() {}
+  virtual void Z2() {}
+} P;
+
+struct SimplePadVtable3 {
+  static void operator delete(void *ptr, size_t sz) {}
+  virtual ~SimplePadVtable3() {}
+  virtual void Foo3() {}
+  virtual void Bar3() {}
+  virtual void Baz3() {}
+  virtual void Buzz3() {}
+} Q;
+
+struct SimplePadMultiVTables
+    : public SimplePadVtable1,
+      public SimplePadVtable2,
+      public SimplePadVtable3 {
+
+  ~SimplePadMultiVTables() override {}
+  static void operator delete(void *ptr, size_t sz) {}
+
+  // SimplePadVtable1 overrides
+  void A1() override {}
+
+  // SimplePadVtable2 overrides
+  void Y2() override {}
+  void Z2() override {}
+
+  // SimplePadVtable3 overrides
+  void Bar3() override {}
+  void Baz3() override {}
+  void Buzz3() override {}
+} R;
+
+int main(int argc, char **argv) {
+
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/SimplePaddingTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/Stripped.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/Stripped.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/Stripped.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,55 @@
+// Compile with "cl /c /Zi /GR- TypeQualifiersTest.cpp"
+// Link with "link TypeQualifiersTest.obj /debug /nodefaultlib /entry:main"
+
+union Union {
+  int * __restrict x_member;
+  float * __restrict y_member;
+  int* volatile __restrict m_volatile;
+  const char* m_const;
+};
+
+int f(const volatile int* __restrict arg_crv) {
+  Union u;
+  return 1;
+}
+
+void g(int& __restrict arg_ref) {
+}
+
+namespace NS {
+  class Class {
+  public:
+    int get() const { return 1;}
+    int set() __restrict { return 2; }
+    void help() volatile { return; }
+  };
+
+  struct Foo {
+    int a;
+    int b;
+    int func(int x) __restrict { return 1; }
+  };
+
+  Foo s = { 10 };
+
+  const int* __restrict p_object = &s.a;
+
+  volatile int Foo:: * __restrict p_data_member = &Foo::a;
+
+  int (Foo::* p_member_func)(int) __restrict = &Foo::func;
+}
+
+typedef long* __restrict RestrictTypedef;
+RestrictTypedef RestrictVar;
+
+typedef volatile int* __restrict RankNArray[10][100];
+RankNArray ArrayVar;
+
+int main() {
+  NS::Class ClassVar;
+  ClassVar.get();
+  ClassVar.help();
+  ClassVar.set();
+
+  return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeQualifiersTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,6 @@
+// Compile with "cl /c /Zi TypeServerTest.cpp /FdTypeServerTest.pdb"
+
+int main(void)
+{
+	return 0;
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/TypeServerTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.cpp?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.cpp (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.cpp Tue Jul  9 10:14:24 2019
@@ -0,0 +1,11 @@
+// Compile with "cl /c /Zi /GR- UsingNamespaceTest.cpp"
+// Link with "link UsingNamespaceTest.obj /debug /nodefaultlib /entry:main"
+
+namespace NS {
+  int foo() { return 1; }
+}
+
+using namespace NS;
+int main(int argc, char **argv) {
+  return foo();
+}

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.pdb
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.pdb?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/UsingNamespaceTest.pdb
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/Inputs/tpi.bin
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/Inputs/tpi.bin?rev=365515&view=auto
==============================================================================
Binary file - no diff available.

Propchange: llvm/trunk/test/tools/llvm-pdbutil/Inputs/tpi.bin
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: llvm/trunk/test/tools/llvm-pdbutil/checksum-string.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/checksum-string.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/checksum-string.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/checksum-string.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,6 @@
+; REQUIRES: diasdk
+; RUN: llvm-pdbutil pretty -lines %p/Inputs/PrettyFuncDumperTest.pdb > %t
+
+; CHECK: ---COMPILANDS---
+; CHECK: {{.*}}\PrettyFuncDumperTest.obj
+; CHECK: {{.*}}\prettyfuncdumpertest.cpp (MD5: E36B273C4D7B3D70C996387C95A6C4F7)

Added: llvm/trunk/test/tools/llvm-pdbutil/class-layout.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/class-layout.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/class-layout.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/class-layout.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,57 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -all -class-recurse-depth=1 \
+; RUN:   %p/Inputs/ClassLayoutTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_TEST
+; RUN: FileCheck -input-file=%t %s -check-prefix=MEMBERS_TEST
+; RUN: FileCheck -input-file=%t %s -check-prefix=BASE_CLASS_A
+; RUN: FileCheck -input-file=%t %s -check-prefix=BASE_CLASS_B
+; RUN: FileCheck -input-file=%t %s -check-prefix=BASE_CLASS_C
+; RUN: FileCheck -input-file=%t %s -check-prefix=BASE_CLASS_D
+; RUN: FileCheck -input-file=%t %s -check-prefix=UDT_KIND_TEST
+; RUN: FileCheck -input-file=%t %s -check-prefix=BITFIELD_TEST
+
+; GLOBALS_TEST: ---GLOBALS---
+; GLOBALS_TEST-DAG: int GlobalsTest::IntVar
+; GLOBALS_TEST-DAG: double GlobalsTest::DoubleVar
+; GLOBALS_TEST-DAG: GlobalsTest::Enum GlobalsTest::EnumVar
+
+; MEMBERS_TEST: ---TYPES---
+; MEMBERS_TEST: class MembersTest::A [sizeof = 16] {
+; MEMBERS_TEST-DAG: typedef int NestedTypedef
+; MEMBERS_TEST-DAG: enum NestedEnum
+; MEMBERS_TEST: void {{(MembersTest::A::)?}}MemberFunc()
+; MEMBERS_TEST-DAG: data +0x00 [sizeof=4] int IntMemberVar
+; MEMBERS_TEST-NEXT: <padding> (4 bytes)
+; MEMBERS_TEST-NEXT: data +0x08 [sizeof=8] double DoubleMemberVar
+; MEMBERS_TEST: }
+
+; BASE_CLASS_A: ---TYPES---
+; BASE_CLASS_A: class BaseClassTest::A [sizeof = 1] {}
+
+; BASE_CLASS_B: ---TYPES---
+; BASE_CLASS_B: class BaseClassTest::B [sizeof = 4]
+; BASE_CLASS_B-NEXT: : public virtual BaseClassTest::A {
+
+; BASE_CLASS_C: ---TYPES---
+; BASE_CLASS_C: class BaseClassTest::C [sizeof = 4]
+; BASE_CLASS_C-NEXT: : public virtual BaseClassTest::A {
+
+; BASE_CLASS_D: ---TYPES---
+; BASE_CLASS_D: class BaseClassTest::D [sizeof = 8]
+; BASE_CLASS_D-NEXT: protected BaseClassTest::B
+; BASE_CLASS_D-NEXT: private BaseClassTest::C
+
+; UDT_KIND_TEST: ---TYPES---
+; UDT_KIND_TEST-DAG: union UdtKindTest::C [sizeof = 1] {}
+; UDT_KIND_TEST-DAG: class UdtKindTest::B [sizeof = 1] {}
+; UDT_KIND_TEST-DAG: struct UdtKindTest::A [sizeof = 1] {}
+
+; BITFIELD_TEST: ---TYPES---
+; BITFIELD_TEST: struct BitFieldTest::A [sizeof = 8] {
+; BITFIELD_TEST-NEXT: +0x00 [sizeof=4] int Bits1 : 1
+; BITFIELD_TEST-NEXT: +0x00 [sizeof=4] int Bits2 : 2
+; BITFIELD_TEST-NEXT: +0x00 [sizeof=4] int Bits3 : 3
+; BITFIELD_TEST-NEXT: +0x00 [sizeof=4] int Bits4 : 4
+; BITFIELD_TEST-NEXT: +0x00 [sizeof=4] int Bits22 : 22
+; BITFIELD_TEST-NEXT: +0x04 [sizeof=4] int Offset0x04

Added: llvm/trunk/test/tools/llvm-pdbutil/complex-padding-graphical.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/complex-padding-graphical.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/complex-padding-graphical.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/complex-padding-graphical.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,55 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -classes -class-definitions=layout \
+; RUN:     -include-types=Test %p/Inputs/ComplexPaddingTest.pdb > %t
+
+; RUN: FileCheck -input-file=%t %s -check-prefix=DIRECT_VB_ONLY
+; RUN: FileCheck -input-file=%t %s -check-prefix=DIRECT_VB_AND_NON_VB
+; RUN: FileCheck -input-file=%t %s -check-prefix=INDIRECT_VB
+; RUN: FileCheck -input-file=%t %s -check-prefix=INDIRECT_AND_DIRECT_VB
+
+
+; DIRECT_VB_ONLY:      struct TestIVBBase [sizeof = 16]
+; DIRECT_VB_ONLY-NEXT:   : public virtual TestVB {
+; DIRECT_VB_ONLY-NEXT:   vbptr +0x00 [sizeof=4]
+; DIRECT_VB_ONLY-NEXT:   data +0x04 [sizeof=4] int A
+; DIRECT_VB_ONLY-NEXT:   vbase +0x08 [sizeof=8] TestVB
+; DIRECT_VB_ONLY-NEXT:     vfptr +0x08 [sizeof=4]
+; DIRECT_VB_ONLY-NEXT:     data +0x0c [sizeof=4] int X
+; DIRECT_VB_ONLY-NEXT: }
+
+DIRECT_VB_AND_NON_VB:      struct TestVBLayout [sizeof = 24]
+DIRECT_VB_AND_NON_VB-NEXT:   : public TestNVB
+DIRECT_VB_AND_NON_VB-NEXT:   , public virtual TestVB {
+DIRECT_VB_AND_NON_VB-NEXT:   base +0x00 [sizeof=8] TestNVB
+DIRECT_VB_AND_NON_VB-NEXT:     vfptr +0x00 [sizeof=4]
+DIRECT_VB_AND_NON_VB-NEXT:     data +0x04 [sizeof=4] int Y
+DIRECT_VB_AND_NON_VB-NEXT:   vbptr +0x08 [sizeof=4]
+DIRECT_VB_AND_NON_VB-NEXT:   data +0x0c [sizeof=4] int Z
+DIRECT_VB_AND_NON_VB-NEXT:   vbase +0x10 [sizeof=8] TestVB
+DIRECT_VB_AND_NON_VB-NEXT:     vfptr +0x10 [sizeof=4]
+DIRECT_VB_AND_NON_VB-NEXT:     data +0x14 [sizeof=4] int X
+DIRECT_VB_AND_NON_VB-NEXT: }
+
+INDIRECT_VB:      struct TestIVBDerived [sizeof = 20]
+INDIRECT_VB-NEXT:   : public TestIVBBase {
+INDIRECT_VB-NEXT:   base +0x00 [sizeof=8] TestIVBBase
+INDIRECT_VB-NEXT:     vbptr +0x00 [sizeof=4]
+INDIRECT_VB-NEXT:     data +0x04 [sizeof=4] int A
+INDIRECT_VB-NEXT:   data +0x08 [sizeof=4] int B
+INDIRECT_VB-NEXT:   ivbase +0x0c [sizeof=8] TestVB
+INDIRECT_VB-NEXT:     vfptr +0x0c [sizeof=4]
+INDIRECT_VB-NEXT:     data +0x10 [sizeof=4] int X
+INDIRECT_VB-NEXT: }
+
+INDIRECT_AND_DIRECT_VB:      struct TestIVBMergedDerived [sizeof = 20]
+INDIRECT_AND_DIRECT_VB-NEXT:   : public TestIVBBase
+INDIRECT_AND_DIRECT_VB-NEXT:   , public virtual TestVB {
+INDIRECT_AND_DIRECT_VB-NEXT:   base +0x00 [sizeof=8] TestIVBBase
+INDIRECT_AND_DIRECT_VB-NEXT:     vbptr +0x00 [sizeof=4]
+INDIRECT_AND_DIRECT_VB-NEXT:     data +0x04 [sizeof=4] int A
+INDIRECT_AND_DIRECT_VB-NEXT:   data +0x08 [sizeof=4] int B
+INDIRECT_AND_DIRECT_VB-NEXT:   vbase +0x0c [sizeof=8] TestVB
+INDIRECT_AND_DIRECT_VB-NEXT:     vfptr +0x0c [sizeof=4]
+INDIRECT_AND_DIRECT_VB-NEXT:     data +0x10 [sizeof=4] int X
+INDIRECT_AND_DIRECT_VB-NEXT: }

Added: llvm/trunk/test/tools/llvm-pdbutil/enum-layout.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/enum-layout.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/enum-layout.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/enum-layout.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,22 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -types %p/Inputs/ClassLayoutTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBAL_ENUM
+; RUN: FileCheck -input-file=%t %s -check-prefix=MEMBER_ENUM
+
+; GLOBAL_ENUM: ---TYPES---
+; GLOBAL_ENUM: Enums:
+; GLOBAL_ENUM: enum GlobalsTest::Enum {
+; GLOBAL_ENUM-NEXT: Val1 = 0
+; GLOBAL_ENUM-NEXT: }
+
+; MEMBER_ENUM: ---TYPES---
+; MEMBER_ENUM: Classes:
+; MEMBER_ENUM: struct __vc_attributes::threadingAttribute [sizeof = 4] {
+; MEMBER_ENUM-NEXT: enum threading_e {
+; MEMBER_ENUM-NEXT: apartment = 1
+; MEMBER_ENUM-NEXT: single = 2
+; MEMBER_ENUM-NEXT: free = 3
+; MEMBER_ENUM-NEXT: neutral = 4
+; MEMBER_ENUM-NEXT: both = 5
+; MEMBER_ENUM-NEXT: }

Added: llvm/trunk/test/tools/llvm-pdbutil/explain-dbi-stream.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/explain-dbi-stream.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/explain-dbi-stream.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/explain-dbi-stream.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,209 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil explain \
+; RUN: -offset=0xF000 \
+; RUN: -offset=0xF004 \
+; RUN: -offset=0xF008 \
+; RUN: -offset=0xF00C \
+; RUN: -offset=0xF00E \
+; RUN: -offset=0xF010 \
+; RUN: -offset=0xF012 \
+; RUN: -offset=0xF014 \
+; RUN: -offset=0xF016 \
+; RUN: -offset=0xF018 \
+; RUN: -offset=0xF01C \
+; RUN: -offset=0xF020 \
+; RUN: -offset=0xF024 \
+; RUN: -offset=0xF028 \
+; RUN: -offset=0xF02C \
+; RUN: -offset=0xF030 \
+; RUN: -offset=0xF034 \
+; RUN: -offset=0xF038 \
+; RUN: -offset=0xF03A \
+; RUN: -offset=0xF03C \
+; RUN: -offset=0xF03E \
+; RUN: -offset=0xF040 \
+; RUN: -offset=0xF0DC \
+; RUN: %p/Inputs/InjectedSource.pdb | FileCheck %s
+
+CHECK:      Block:Offset = F:0000.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 0/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 0/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the DBI Stream Version Signature.
+CHECK-NEXT:     The current value is -1.
+
+CHECK:      Block:Offset = F:0004.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 4/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 4/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the DBI Stream Version Header.
+CHECK-NEXT:     The current value is 19990903.
+
+CHECK:      Block:Offset = F:0008.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 8/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 8/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the age of the DBI Stream.
+CHECK-NEXT:     The current value is 1.
+
+CHECK:      Block:Offset = F:000C.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 12/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 12/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the index of the Global Symbol Stream.
+CHECK-NEXT:     The current value is 7.
+
+CHECK:      Block:Offset = F:000E.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 14/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 14/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the build number.
+CHECK-NEXT:     The current value is 36363.
+
+CHECK:      Block:Offset = F:0010.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 16/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 16/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the index of the Public Symbol Stream.
+CHECK-NEXT:     The current value is 8.
+
+CHECK:      Block:Offset = F:0012.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 18/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 18/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the version of mspdb.dll.
+CHECK-NEXT:     The current value is 25547.
+
+CHECK:      Block:Offset = F:0014.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 20/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 20/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the index of the Symbol Record Stream.
+CHECK-NEXT:     The current value is 9.
+
+CHECK:      Block:Offset = F:0016.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 22/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 22/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the rbld of mspdb.dll.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:0018.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 24/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 24/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Module Info Substream.
+CHECK-NEXT:     The current value is 232.
+
+CHECK:      Block:Offset = F:001C.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 28/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 28/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Section Contribution Substream.
+CHECK-NEXT:     The current value is 172.
+
+CHECK:      Block:Offset = F:0020.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 32/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 32/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Section Map Substream.
+CHECK-NEXT:     The current value is 84.
+
+CHECK:      Block:Offset = F:0024.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 36/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 36/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the File Info Substream.
+CHECK-NEXT:     The current value is 132.
+
+CHECK:      Block:Offset = F:0028.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 40/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 40/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Type Server Map.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:002C.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 44/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 44/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the index of the MFC Type Server stream.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:0030.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 48/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 48/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Optional Debug Stream array.
+CHECK-NEXT:     The current value is 22.
+
+CHECK:      Block:Offset = F:0034.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 52/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 52/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the size of the Edit & Continue Substream.
+CHECK-NEXT:     The current value is 75.
+
+CHECK:      Block:Offset = F:0038.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 56/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 56/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the DBI Stream flags.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:003A.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 58/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 58/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains the machine type.
+CHECK-NEXT:     The current value is 34404.
+
+CHECK:      Block:Offset = F:003C.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 60/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 60/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains reserved data.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:003E.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 62/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 62/64 of the DBI Stream Header.
+CHECK-NEXT:     which contains reserved data.
+CHECK-NEXT:     The current value is 0.
+
+CHECK:      Block:Offset = F:0040.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 64/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 0/232 of the Module Info Substream.
+CHECK-NEXT:     which contains the descriptor for module 0 (D:\sandbox\nvtest\nvtest\x64\Debug\nvtest.obj).
+
+CHECK:      Block:Offset = F:00DC.
+CHECK-NEXT: Address is in block 15 (allocated).
+CHECK-NEXT:   Address is at offset 220/781 of Stream 3 (DBI Stream).
+CHECK-NEXT:   Within the DBI stream:
+CHECK-NEXT:     address is at offset 156/232 of the Module Info Substream.
+CHECK-NEXT:     which contains the descriptor for module 1 (* Linker *).

Added: llvm/trunk/test/tools/llvm-pdbutil/explain-pdb-stream.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/explain-pdb-stream.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/explain-pdb-stream.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/explain-pdb-stream.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,48 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil explain \
+; RUN: -offset=0x11000 \
+; RUN: -offset=0x11004 \
+; RUN: -offset=0x11008 \
+; RUN: -offset=0x1100C \
+; RUN: -offset=0x1101C \
+; RUN: %p/Inputs/InjectedSource.pdb | FileCheck %s
+
+
+CHECK:      Block:Offset = 11:0000.
+CHECK-NEXT: Address is in block 17 (allocated).
+CHECK-NEXT:   Address is at offset 0/202 of Stream 1 (PDB Stream).
+CHECK-NEXT:   Within the PDB stream:
+CHECK-NEXT:     address is at offset 0/28 of the PDB Stream Header.
+CHECK-NEXT:     which contains the PDB Stream Version Signature.
+CHECK-NEXT:     The current value is 20000404.
+
+CHECK:      Block:Offset = 11:0004.
+CHECK-NEXT: Address is in block 17 (allocated).
+CHECK-NEXT:   Address is at offset 4/202 of Stream 1 (PDB Stream).
+CHECK-NEXT:   Within the PDB stream:
+CHECK-NEXT:     address is at offset 4/28 of the PDB Stream Header.
+CHECK-NEXT:     which contains the signature of the PDB Stream.
+CHECK-NEXT:     The current value is 1521153653.
+
+CHECK:      Block:Offset = 11:0008.
+CHECK-NEXT: Address is in block 17 (allocated).
+CHECK-NEXT:   Address is at offset 8/202 of Stream 1 (PDB Stream).
+CHECK-NEXT:   Within the PDB stream:
+CHECK-NEXT:     address is at offset 8/28 of the PDB Stream Header.
+CHECK-NEXT:     which contains the age of the PDB.
+CHECK-NEXT:     The current value is 1.
+
+CHECK:      Block:Offset = 11:000C.
+CHECK-NEXT: Address is in block 17 (allocated).
+CHECK-NEXT:   Address is at offset 12/202 of Stream 1 (PDB Stream).
+CHECK-NEXT:   Within the PDB stream:
+CHECK-NEXT:     address is at offset 12/28 of the PDB Stream Header.
+CHECK-NEXT:     which contains the guid of the PDB.
+CHECK-NEXT:     The current value is {826BE46E-02ED-7043-9C27-20CCC07E92A7}.
+
+CHECK:      Block:Offset = 11:001C.
+CHECK-NEXT: Address is in block 17 (allocated).
+CHECK-NEXT:   Address is at offset 28/202 of Stream 1 (PDB Stream).
+CHECK-NEXT:   Within the PDB stream:
+CHECK-NEXT:     address is at offset 0/166 of the Named Stream Map.

Added: llvm/trunk/test/tools/llvm-pdbutil/explain.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/explain.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/explain.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/explain.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,88 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil explain -offset=0 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=ZERO %s
+; RUN: llvm-pdbutil explain -offset=40 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=FORTY %s
+; RUN: llvm-pdbutil explain -offset=60 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=SIXTY %s
+
+; RUN: llvm-pdbutil explain -offset=0x1000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=FPM1 %s
+; RUN: llvm-pdbutil explain -offset=0x1100 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=EXTRANEOUSFPM %s
+; RUN: llvm-pdbutil explain -offset=0x2000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=FPM2 %s
+
+; RUN: llvm-pdbutil explain -offset=0x3000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=UNALLOCATED %s
+
+; RUN: llvm-pdbutil explain -offset=0x7000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=STREAM %s
+
+; RUN: llvm-pdbutil explain -offset=0x1A000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=STREAMDIR %s
+
+; RUN: llvm-pdbutil explain -offset=0x1B000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=DIRBLOCKLIST %s
+
+; RUN: llvm-pdbutil explain -offset=0x1D000 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=INVALIDFILEOFFSET %s
+
+; RUN: llvm-pdbutil explain -offset=0xA100 %p/Inputs/InjectedSource.pdb \
+; RUN:  | FileCheck --check-prefix=UNUSED %s
+
+
+ZERO:      Block:Offset = 0:0000.
+ZERO-NEXT: Address is in block 0 (allocated).
+ZERO-NEXT:   This corresponds to offset 0 of the MSF super block,
+ZERO-NEXT:   which is part of the MSF file magic.
+
+FORTY:      Block:Offset = 0:0028.
+FORTY-NEXT: Address is in block 0 (allocated).
+FORTY-NEXT:   This corresponds to offset 40 of the MSF super block,
+FORTY-NEXT:   which contains the number of blocks in the file.
+FORTY-NEXT:   The current value is 29.
+
+SIXTY:      Block:Offset = 0:003C.
+SIXTY-NEXT: Address is in block 0 (allocated).
+SIXTY-NEXT:   This corresponds to offset 60 of the MSF super block,
+SIXTY-NEXT:   which is outside the range of valid data for the super block.
+
+FPM1:      Block:Offset = 1:0000.
+FPM1-NEXT: Address is in block 1 (allocated).
+FPM1-NEXT:   Address is in FPM1 (Alt FPM)
+FPM1-NEXT:   Address describes the allocation status of blocks [0,8)
+FPM1-NEXT:   Status = 00000011 (Note: 0 = allocated, 1 = free)
+
+EXTRANEOUSFPM:      Block:Offset = 1:0100.
+EXTRANEOUSFPM-NEXT: Address is in block 1 (allocated).
+EXTRANEOUSFPM-NEXT:   Address is in FPM1 (Alt FPM)
+EXTRANEOUSFPM-NEXT:   Address is in extraneous FPM space.
+
+FPM2:      Block:Offset = 2:0000.
+FPM2-NEXT: Address is in block 2 (allocated).
+FPM2-NEXT:   Address is in FPM2 (Main FPM)
+FPM2-NEXT:   Address describes the allocation status of blocks [0,8)
+FPM2-NEXT:   Status = 00011100 (Note: 0 = allocated, 1 = free)
+
+UNALLOCATED:      Block:Offset = 3:0000.
+UNALLOCATED-NEXT: Address is in block 3 (unallocated).
+
+STREAM:      Block:Offset = 7:0000.
+STREAM-NEXT: Address is in block 7 (allocated).
+STREAM-NEXT:   Address is at offset 0/684 of Stream 12 (Module "* Linker *").
+
+STREAMDIR:      Block:Offset = 1A:0000.
+STREAMDIR-NEXT: Address is in block 26 (allocated).
+STREAMDIR-NEXT:   Address is at offset 0/156 of Stream Directory.
+
+DIRBLOCKLIST:      Block:Offset = 1B:0000.
+DIRBLOCKLIST-NEXT: Address is in block 27 (allocated).
+DIRBLOCKLIST-NEXT:   Address is at offset 0 of the directory block list
+
+INVALIDFILEOFFSET: Address 118784 is not in the file (file size = 118784).
+
+UNUSED:      Block:Offset = A:0100.
+UNUSED-NEXT: Address is in block 10 (allocated).
+UNUSED-NEXT:   Address is at offset 256/120 of Stream 11 (Section Header Data) in unused space.

Added: llvm/trunk/test/tools/llvm-pdbutil/export-stream.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/export-stream.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/export-stream.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/export-stream.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,2 @@
+; RUN: llvm-pdbutil export -stream=2 -out=%t.tpi.bin %p/Inputs/InjectedSource.pdb
+; RUN: diff %t.tpi.bin %p/Inputs/tpi.bin

Added: llvm/trunk/test/tools/llvm-pdbutil/fpo-data.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/fpo-data.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/fpo-data.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/fpo-data.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,14 @@
+; RUN: llvm-pdbutil dump -fpo %p/Inputs/FPOTest.pdb \
+; RUN:     | FileCheck %s
+
+CHECK:                        Old FPO Data                        
+CHECK-NEXT: ============================================================
+CHECK-NEXT:   RVA    | Code | Locals | Params | Prolog | Saved Regs | Use BP | Has SEH | Frame Type
+CHECK-NEXT: 0000004E |   19 |      0 |      0 |      0 |          0 |  false |   false |       FPO
+
+CHECK:                        New FPO Data                        
+CHECK-NEXT: ============================================================
+CHECK-NEXT:   RVA    | Code | Locals | Params | Stack | Prolog | Saved Regs | Has SEH | Has C++EH | Start | Program
+CHECK-NEXT: 00001010 |   18 |      0 |      0 |     0 |      4 |          0 |   false |     false |  true | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = 
+CHECK-NEXT: 00001011 |   17 |      0 |      0 |     0 |      3 |          4 |   false |     false | false | $T0 .raSearch = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = 
+CHECK-NEXT: 00001013 |   15 |      0 |      0 |     0 |      1 |          4 |   false |     false | false | $T0 $ebp 4 + = $eip $T0 ^ = $esp $T0 4 + = $ebp $T0 4 - ^ = 
\ No newline at end of file

Added: llvm/trunk/test/tools/llvm-pdbutil/injected-sources.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/injected-sources.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/injected-sources.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/injected-sources.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,32 @@
+; The PDB committed to the repo does not seem to be recognized by older
+; versions of DIA SDK, so we xfail the test temporarily until we can
+; figure out how to get a PDB that makes all versions of MSVC happy.
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -injected-sources -injected-source-content \
+; RUN:   %p/Inputs/InjectedSource.pdb | FileCheck %s
+; RUN: llvm-pdbutil pretty -injected-sources -injected-source-content \
+; RUN:   %p/Inputs/ClassLayoutTest.pdb | FileCheck --check-prefix=NEGATIVE %s
+
+; CHECK:      ---INJECTED SOURCES---
+; CHECK:      c.natvis (140 bytes): obj=<null>, vname=c.natvis, crc=334478030, compression=None
+; CHECK-NEXT: <?xml version="1.0" encoding="utf-8"?>
+; CHECK-NEXT: <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+; CHECK-NEXT: </AutoVisualizer>
+; CHECK:      a.natvis (140 bytes): obj=<null>, vname=a.natvis, crc=334478030, compression=None
+; CHECK-NEXT: <?xml version="1.0" encoding="utf-8"?>
+; CHECK-NEXT: <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+; CHECK-NEXT: </AutoVisualizer>
+; CHECK:      b.natvis (294 bytes): obj=<null>, vname=b.natvis, crc=2059731902, compression=None
+; CHECK-NEXT: <?xml version="1.0" encoding="utf-8"?>
+; CHECK-NEXT: <AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
+; CHECK-NEXT: <Type Name="Baz">
+; CHECK-NEXT:   <DisplayString>Third test</DisplayString>
+; CHECK-NEXT: </Type>
+; CHECK-NEXT: <Type Name="Buzz">
+; CHECK-NEXT:   <DisplayString>Fourth test</DisplayString>
+; CHECK-NEXT: </Type>
+; CHECK-NEXT: </AutoVisualizer>
+
+; NEGATIVE:      ---INJECTED SOURCES---
+; NEGATIVE-NEXT: There are no injected sources.

Added: llvm/trunk/test/tools/llvm-pdbutil/lit.local.cfg
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/lit.local.cfg?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/lit.local.cfg (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/lit.local.cfg Tue Jul  9 10:14:24 2019
@@ -0,0 +1,2 @@
+if config.have_dia_sdk:
+  config.available_features.add("diasdk")

Added: llvm/trunk/test/tools/llvm-pdbutil/load-address.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/load-address.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/load-address.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/load-address.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,12 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -externals %p/Inputs/LoadAddressTest.pdb \
+; RUN:    | FileCheck --check-prefix=RVA %s
+; RUN: llvm-pdbutil pretty -externals -load-address=0x40000000 \
+; RUN: %p/Inputs/LoadAddressTest.pdb | FileCheck --check-prefix=VA %s
+
+; RVA: ---EXTERNALS---
+; RVA: [0x00001010] _main
+
+; VA: ---EXTERNALS---
+; VA: [0x40001010] _main

Added: llvm/trunk/test/tools/llvm-pdbutil/partial-type-stream.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/partial-type-stream.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/partial-type-stream.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/partial-type-stream.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,29 @@
+; RUN: llvm-pdbutil dump -type-index=0x1019 %p/Inputs/ClassLayoutTest.pdb \
+; RUN:     | FileCheck --check-prefix=NODEPS %s
+; RUN: llvm-pdbutil dump -type-index=0x1019 -dependents -dont-resolve-forward-refs \
+; RUN:     %p/Inputs/ClassLayoutTest.pdb | FileCheck --check-prefix=DEPS %s
+
+
+NODEPS:                          Types (TPI Stream)
+NODEPS-NEXT: ============================================================
+NODEPS-NEXT:   Showing 1 records.
+NODEPS-NEXT:   0x1019 | LF_MFUNCTION [size = 28]
+NODEPS-NEXT:            return type = 0x0003 (void), # args = 0, param list = 0x100E
+NODEPS-NEXT:            class type = 0x1017, this type = 0x1018, this adjust = 0
+NODEPS-NEXT:            calling conv = thiscall, options = None
+
+
+DEPS:                           Types (TPI Stream)
+DEPS-NEXT: ============================================================
+DEPS-NEXT:   Showing 1 records and their dependents (4 records total)
+DEPS-NEXT:   0x100E | LF_ARGLIST [size = 8]
+DEPS-NEXT:   0x1017 | LF_CLASS [size = 60] `MembersTest::A`
+DEPS-NEXT:            unique name: `.?AVA at MembersTest@@`
+DEPS-NEXT:            vtable: <no type>, base list: <no type>, field list: <no type>
+DEPS-NEXT:            options: forward ref | has unique name
+DEPS-NEXT:   0x1018 | LF_POINTER [size = 12]
+DEPS-NEXT:            referent = 0x1017, mode = pointer, opts = const, kind = ptr32
+DEPS-NEXT:   0x1019 | LF_MFUNCTION [size = 28]
+DEPS-NEXT:            return type = 0x0003 (void), # args = 0, param list = 0x100E
+DEPS-NEXT:            class type = 0x1017, this type = 0x1018, this adjust = 0
+DEPS-NEXT:            calling conv = thiscall, options = None

Added: llvm/trunk/test/tools/llvm-pdbutil/pretty-func-dumper.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/pretty-func-dumper.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/pretty-func-dumper.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/pretty-func-dumper.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,27 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -all -class-recurse-depth=1 \
+; RUN:   %p/Inputs/PrettyFuncDumperTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_FUNC
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_DATA
+; RUN: FileCheck -input-file=%t %s -check-prefix=TYPEDEF
+
+; GLOBALS_FUNC: ---GLOBALS---
+; GLOBALS_FUNC-DAG: void __cdecl NS::Func(char a, int b, ...)
+; GLOBALS_FUNC-DAG: void __cdecl TemplateFunc<1,int>(int <Arg_0>)
+; GLOBALS_FUNC-DAG: void __cdecl TemplateFunc<1,int,int,int>(int <Arg_0>, int <Arg_1>, int <Arg_2>)
+; GLOBALS_FUNC-DAG: void __cdecl `anonymous namespace'::Func(int& a, const double b, volatile bool c)
+; GLOBALS_FUNC-DAG: void __cdecl Func(int* array)
+; GLOBALS_FUNC-DAG: int MemberFuncsTest::A::FuncA()
+; GLOBALS_FUNC-DAG: void __cdecl MemberFuncsTest::A::FuncB(int a, ...)
+
+; GLOBALS_DATA: ---GLOBALS---
+; GLOBALS_DATA-DAG: void (__cdecl * FuncVarA)()
+; GLOBALS_DATA-DAG: float (__cdecl * FuncVarB)()
+; GLOBALS_DATA-DAG: int (__cdecl * VariadicFuncVar)(char, double, ...)
+
+; TYPEDEF: ---TYPES---
+; TYPEDEF: Typedefs:
+; TYPEDEF-DAG: typedef void (__cdecl *)() FuncPtrA
+; TYPEDEF-DAG: typedef int (__cdecl *)(char, double, ...) VariadicFuncPtrTypedef
+; TYPEDEF-DAG: typedef float (__cdecl *)() FuncPtrB

Added: llvm/trunk/test/tools/llvm-pdbutil/regex-filter.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/regex-filter.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/regex-filter.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/regex-filter.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,94 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -module-syms -globals -types %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=NO_FILTER %s
+
+; RUN: llvm-pdbutil pretty -types -exclude-types="GlobalTypedef|NestedTypedef" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_TYPEDEFS %s
+; RUN: llvm-pdbutil pretty -classes -enums %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=EXCLUDE_TYPEDEFS %s
+
+; RUN: llvm-pdbutil pretty -types -exclude-types="GlobalEnum|NestedEnum" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_ENUMS %s
+; RUN: llvm-pdbutil pretty -classes -typedefs %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=EXCLUDE_ENUMS %s
+
+; RUN: llvm-pdbutil pretty -types -module-syms -globals -exclude-symbols="MemberVar|GlobalVar" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=EXCLUDE_VARS %s
+; RUN: llvm-pdbutil pretty -classes -exclude-types="FilterTestClass" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck  --check-prefix=EXCLUDE_WHOLE_CLASS %s
+; RUN: llvm-pdbutil pretty -module-syms -globals -exclude-compilands="FilterTest.obj"  \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck  --check-prefix=EXCLUDE_COMPILAND %s
+; RUN: llvm-pdbutil pretty -types -include-types="FilterTestClass" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=INCLUDE_ONLY_TYPES %s
+; RUN: llvm-pdbutil pretty -types -module-syms -globals -include-symbols="[[:<:]](IntGlobalVar|DoubleGlobalVar)[[:>:]]" \
+; RUN:    %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=INCLUDE_ONLY_VARS %s
+
+; NO_FILTER: ---TYPES---
+; NO_FILTER: Enums:
+; NO_FILTER: enum GlobalEnum
+; NO_FILTER: Typedefs
+; NO_FILTER: typedef int GlobalTypedef
+; NO_FILTER: Classes:
+; NO_FILTER: struct __vc_attributes
+; NO_FILTER: class FilterTestClass
+; NO_FILTER-DAG: typedef int NestedTypedef
+; NO_FILTER-DAG: enum NestedEnum
+; NO_FILTER-DAG: int IntMemberVar
+; NO_FILTER-DAG: double DoubleMemberVar
+; NO_FILTER: ---SYMBOLS---
+; NO_FILTER: Inputs\FilterTest.obj
+; NO_FILTER: int __cdecl main(int argc, char** argv)
+; NO_FILTER: ---GLOBALS---
+; NO_FILTER-DAG: double DoubleGlobalVar
+; NO_FILTER-DAG: int IntGlobalVar
+; NO_FILTER-DAG: GlobalEnum GlobalEnumVar
+
+; EXCLUDE_TYPEDEFS: ---TYPES---
+; EXCLUDE_TYPEDEFS-NOT: GlobalTypedef
+; EXCLUDE_TYPEDEFS-NOT: NestedTypedef
+; EXCLUDE_TYPEDEFS-DAG: GlobalEnum
+; EXCLUDE_TYPEDEFS-DAG: NestedEnum
+; EXCLUDE_TYPEDEFS: class FilterTestClass
+
+; EXCLUDE_ENUMS: ---TYPES---
+; EXCLUDE_ENUMS-NOT: GlobalEnum
+; EXCLUDE_ENUMS-NOT: NestedEnum
+; EXCLUDE_ENUMS: GlobalTypedef
+; EXCLUDE_ENUMS: class FilterTestClass
+
+; EXCLUDE_VARS: ---TYPES---
+; EXCLUDE_VARS-NOT: IntMemberVar
+; EXCLUDE_VARS-NOT: DoubleMemberVar
+; EXCLUDE_VARS-DAG: GlobalEnum
+; EXCLUDE_VARS-DAG: NestedEnum
+; EXCLUDE_VARS: GlobalTypedef
+; EXCLUDE_VARS: class FilterTestClass
+; EXCLUDE_VARS: ---GLOBALS---
+; EXCLUDE_VARS-NOT: DoubleGlobalVar
+; EXCLUDE_VARS-NOT: IntGlobalVar
+
+; EXCLUDE_WHOLE_CLASS: ---TYPES---
+; EXCLUDE_WHOLE_CLASS-NOT: class FilterTestClass
+
+; EXCLUDE_COMPILAND: ---SYMBOLS---
+; EXCLUDE_COMPILAND-NOT: FilterTest.obj
+; EXCLUDE_COMPILAND-NOT: __cdecl main
+; EXCLUDE_COMPILAND: * Linker *
+; EXCLUDE_COMPILAND: ---GLOBALS---
+
+; Everything but types are displayed normally.  But FilterTestClass is
+; the only type that should be displayed.
+; INCLUDE_ONLY_TYPES: ---TYPES---
+; INCLUDE_ONLY_TYPES-NOT: GlobalTypedef
+; INCLUDE_ONLY_TYPES: class FilterTestClass
+
+; We should only see DoubleGlobalVar and IntGlobalVar.  This means that even
+; variables printed in class definitions should be filtered out.
+; INCLUDE_ONLY_VARS: ---TYPES---
+; INCLUDE_ONLY_VARS: class FilterTestClass
+; INCLUDE_ONLY_VARS-NOT: IntMemberVar
+; INCLUDE_ONLY_VARS-NOT: IntDoubleVar
+; INCLUDE_ONLY_VARS: ---GLOBALS---
+; INCLUDE_ONLY_VARS: DoubleGlobalVar
+; INCLUDE_ONLY_VARS: IntGlobalVar

Added: llvm/trunk/test/tools/llvm-pdbutil/simple-padding-graphical.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/simple-padding-graphical.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/simple-padding-graphical.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/simple-padding-graphical.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,127 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -classes -class-definitions=layout \
+; RUN:     -include-types=SimplePad %p/Inputs/SimplePaddingTest.pdb > %t
+
+; RUN: FileCheck -input-file=%t %s -check-prefix=NO_PADDING
+; RUN: FileCheck -input-file=%t %s -check-prefix=UNION
+; RUN: FileCheck -input-file=%t %s -check-prefix=NESTED_UNION
+; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_FROM_FIELDS1
+; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_FROM_FIELDS2
+; RUN: FileCheck -input-file=%t %s -check-prefix=NO_PAD_IN_BASE
+; RUN: FileCheck -input-file=%t %s -check-prefix=PAD_IN_DERIVED
+; RUN: FileCheck -input-file=%t %s -check-prefix=EMPTY_BASE
+; RUN: FileCheck -input-file=%t %s -check-prefix=VFPTR
+; RUN: FileCheck -input-file=%t %s -check-prefix=MULTIPLE_INHERIT
+; RUN: FileCheck -input-file=%t %s -check-prefix=MULTIPLE_INHERIT2
+; RUN: FileCheck -input-file=%t %s -check-prefix=DEEP_INHERIT
+; RUN: FileCheck -input-file=%t %s -check-prefix=AGGREGATE
+
+; NO_PADDING:      struct SimplePadNoPadding [sizeof = 8] {
+; NO_PADDING-NEXT:   data +0x00 [sizeof=4] int X
+; NO_PADDING-NEXT:   data +0x04 [sizeof=4] int Y
+; NO_PADDING-NEXT: }
+
+; UNION:      struct SimplePadUnion [sizeof = 16] {
+; UNION-NEXT:   data +0x00 [sizeof=4] int X
+; UNION-NEXT:   data +0x00 [sizeof=8] __int64 Y
+; UNION-NEXT:   data +0x00 [sizeof=16] SimplePadUnion::
+; UNION-NEXT:     data +0x00 [sizeof=4] int X
+; UNION-NEXT:     <padding> (4 bytes)
+; UNION-NEXT:     data +0x08 [sizeof=8] __int64 Y
+; UNION-NEXT: }
+
+; NESTED_UNION:      struct {{SimplePadUnion::.*}} [sizeof = 16] {
+; NESTED_UNION-NEXT:   data +0x00 [sizeof=4] int X
+; NESTED_UNION-NEXT:   <padding> (4 bytes)
+; NESTED_UNION-NEXT:   data +0x08 [sizeof=8] __int64 Y
+; NESTED_UNION-NEXT: }
+
+; PAD_FROM_FIELDS1:      struct SimplePadFields1 [sizeof = 4] {
+; PAD_FROM_FIELDS1-NEXT:   data +0x00 [sizeof=1] char A
+; PAD_FROM_FIELDS1-NEXT:   data +0x01 [sizeof=1] char B
+; PAD_FROM_FIELDS1-NEXT:   data +0x02 [sizeof=1] char C
+; PAD_FROM_FIELDS1-NEXT:   <padding> (1 bytes)
+; PAD_FROM_FIELDS1-NEXT: }
+
+; PAD_FROM_FIELDS2:      struct SimplePadFields2 [sizeof = 8] {
+; PAD_FROM_FIELDS2-NEXT:   data +0x00 [sizeof=4] int Y
+; PAD_FROM_FIELDS2-NEXT:   data +0x04 [sizeof=1] char X
+; PAD_FROM_FIELDS2-NEXT:   <padding> (3 bytes)
+; PAD_FROM_FIELDS2-NEXT: }
+
+; NO_PAD_IN_BASE:      struct SimplePadBase [sizeof = 4] {
+; NO_PAD_IN_BASE-NEXT:   data +0x00 [sizeof=4] int X
+; NO_PAD_IN_BASE-NEXT: }
+
+; PAD_IN_DERIVED:      struct SimplePadDerived [sizeof = 16]
+; PAD_IN_DERIVED-NEXT:   : public SimplePadBase {
+; PAD_IN_DERIVED-NEXT:   base +0x00 [sizeof=4] SimplePadBase
+; PAD_IN_DERIVED-NEXT:     data +0x00 [sizeof=4] int X
+; PAD_IN_DERIVED-NEXT:   <padding> (4 bytes)
+; PAD_IN_DERIVED-NEXT:   data +0x08 [sizeof=8] __int64 Y
+; PAD_IN_DERIVED-NEXT: }
+
+; EMPTY_BASE:      struct SimplePadEmpty [sizeof = 8]
+; EMPTY_BASE-NEXT:   : public SimplePadEmptyBase1
+; EMPTY_BASE-NEXT:   , public SimplePadEmptyBase2 {
+; EMPTY_BASE-NEXT:   base +0x00 [sizeof=1] SimplePadEmptyBase1
+; EMPTY_BASE-NEXT:   base +0x01 [sizeof=1] SimplePadEmptyBase2
+; EMPTY_BASE-NEXT:   <padding> (2 bytes)
+; EMPTY_BASE-NEXT:   data +0x04 [sizeof=4] int X
+; EMPTY_BASE-NEXT: }
+
+; VFPTR:      struct SimplePadVfptr [sizeof = 8] {
+; VFPTR-NEXT:   vfptr +0x00 [sizeof=4]
+; VFPTR-NEXT:   data +0x04 [sizeof=4] int X
+; VFPTR-NEXT: }
+
+; MULTIPLE_INHERIT:      struct SimplePadMultiInherit [sizeof = 8]
+; MULTIPLE_INHERIT-NEXT:   : public NonEmptyBase1
+; MULTIPLE_INHERIT-NEXT:   , public NonEmptyBase2 {
+; MULTIPLE_INHERIT-NEXT:   base +0x00 [sizeof=1] NonEmptyBase1
+; MULTIPLE_INHERIT-NEXT:     data +0x00 [sizeof=1] bool X
+; MULTIPLE_INHERIT-NEXT:   base +0x01 [sizeof=1] NonEmptyBase2
+; MULTIPLE_INHERIT-NEXT:     data +0x01 [sizeof=1] bool Y
+; MULTIPLE_INHERIT-NEXT:   <padding> (2 bytes)
+; MULTIPLE_INHERIT-NEXT:   data +0x04 [sizeof=4] int X
+; MULTIPLE_INHERIT-NEXT: }
+
+; MULTIPLE_INHERIT2:      SimplePadMultiInherit2 [sizeof = 16]
+; MULTIPLE_INHERIT2-NEXT:   : public SimplePadFields1
+; MULTIPLE_INHERIT2-NEXT:   , public SimplePadFields2 {
+; 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=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:   data +0x0c [sizeof=4] int X
+; MULTIPLE_INHERIT2-NEXT: }
+
+; DEEP_INHERIT:      struct SimplePadTwoLevelInherit [sizeof = 16]
+; DEEP_INHERIT-NEXT:   : public OneLevelInherit {
+; DEEP_INHERIT-NEXT:     base +0x00 [sizeof=4] OneLevelInherit
+; DEEP_INHERIT-NEXT:       base +0x00 [sizeof=1] NonEmptyBase1
+; DEEP_INHERIT-NEXT:         data +0x00 [sizeof=1] bool X
+; DEEP_INHERIT-NEXT:       <padding> (1 bytes)
+; DEEP_INHERIT-NEXT:       data +0x02 [sizeof=2] short Y
+; DEEP_INHERIT-NEXT:     <padding> (4 bytes)
+; DEEP_INHERIT-NEXT:     data +0x08 [sizeof=8] __int64 Z
+; DEEP_INHERIT-NEXT: }
+
+
+; AGGREGATE:      struct SimplePadAggregate [sizeof = 12] {
+; AGGREGATE-NEXT:   data +0x00 [sizeof=1] NonEmptyBase1 X
+; AGGREGATE-NEXT:     data +0x00 [sizeof=1] bool X
+; AGGREGATE-NEXT:   <padding> (3 bytes)
+; AGGREGATE-NEXT:   data +0x04 [sizeof=4] int Y
+; AGGREGATE-NEXT:   data +0x08 [sizeof=4] SimplePadFields1 Fields
+; AGGREGATE-NEXT:     data +0x08 [sizeof=1] char A
+; AGGREGATE-NEXT:     data +0x09 [sizeof=1] char B
+; AGGREGATE-NEXT:     data +0x0a [sizeof=1] char C
+; AGGREGATE-NEXT:     <padding> (1 bytes)
+; AGGREGATE-NEXT: }

Added: llvm/trunk/test/tools/llvm-pdbutil/stripped.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/stripped.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/stripped.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/stripped.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,109 @@
+; RUN: llvm-pdbutil dump -all %p/Inputs/Stripped.pdb > %t
+; RUN: FileCheck -input-file=%t %s
+
+; CHECK: Summary
+; CHECK-NEXT: ============================================================
+; CHECK-NEXT:  Block Size: 4096
+; CHECK-NEXT:  Number of blocks: 17
+; CHECK-NEXT:  Number of streams: 12
+; CHECK-NEXT:  Signature: 1541179274
+; CHECK-NEXT:  Age: 2
+; CHECK-NEXT:  GUID: {FF4F9B62-D99A-4647-97A7-22C702B1E053}
+; CHECK-NEXT:  Features: 0x1
+; CHECK-NEXT:  Has Debug Info: true
+; CHECK-NEXT:  Has Types: true
+; CHECK-NEXT:  Has IDs: true
+; CHECK-NEXT:  Has Globals: true
+; CHECK-NEXT:  Has Publics: true
+; CHECK-NEXT:  Is incrementally linked: false
+; CHECK-NEXT:  Has conflicting types: false
+; CHECK-NEXT:  Is stripped: true
+
+; CHECK: Streams
+; CHECK-NEXT: ============================================================
+; CHECK-NEXT:  Stream  0 (  88 bytes): [Old MSF Directory]
+; CHECK-NEXT:             Blocks: [4]
+; CHECK-NEXT:  Stream  1 (  78 bytes): [PDB Stream]
+; CHECK-NEXT:             Blocks: [14]
+; CHECK-NEXT:  Stream  2 (  56 bytes): [TPI Stream]
+; CHECK-NEXT:             Blocks: [13]
+; CHECK-NEXT:  Stream  3 (1355 bytes): [DBI Stream]
+; CHECK-NEXT:             Blocks: [7]
+; CHECK-NEXT:  Stream  4 (  56 bytes): [IPI Stream]
+; CHECK-NEXT:             Blocks: [6]
+; CHECK-NEXT:  Stream  5 (   0 bytes): [Named Stream "/LinkInfo"]
+; CHECK-NEXT:             Blocks: []
+; CHECK-NEXT:  Stream  6 ( 200 bytes): [Section Header Data]
+; CHECK-NEXT:             Blocks: [8]
+; CHECK-NEXT:  Stream  7 (  16 bytes): [Global Symbol Hash]
+; CHECK-NEXT:             Blocks: [9]
+; CHECK-NEXT:  Stream  8 ( 928 bytes): [Public Symbol Hash]
+; CHECK-NEXT:             Blocks: [11]
+; CHECK-NEXT:  Stream  9 ( 716 bytes): [Symbol Records]
+; CHECK-NEXT:             Blocks: [10]
+; CHECK-NEXT:  Stream 10 (   0 bytes): [TPI Hash]
+; CHECK-NEXT:             Blocks: []
+; CHECK-NEXT:  Stream 11 (   0 bytes): [IPI Hash]
+; CHECK-NEXT:             Blocks: []
+
+; CHECK: Module Stats
+; CHECK-NEXT: ============================================================
+
+; CHECK: S_UDT Record Stats
+; CHECK-NEXT: ============================================================
+
+; CHECK: String Table
+; CHECK-NEXT: ============================================================
+
+; CHECK: Modules
+; CHECK-NEXT: ============================================================
+
+; CHECK: Files
+; CHECK-NEXT: ============================================================
+
+; CHECK: Lines
+; CHECK-NEXT: ============================================================
+
+; CHECK: Inlinee Lines
+; CHECK-NEXT: ============================================================
+
+; CHECK: Cross Module Imports
+; CHECK-NEXT: ============================================================
+
+; CHECK: Cross Module Exports
+; CHECK-NEXT: ============================================================
+
+; CHECK: Old FPO Data
+; CHECK-NEXT: ============================================================
+
+; CHECK: New FPO Data
+; CHECK-NEXT: ============================================================
+
+; CHECK: Types (TPI Stream)
+; CHECK-NEXT: ============================================================
+
+; CHECK: Types (IPI Stream)
+; CHECK-NEXT: ============================================================
+
+; CHECK: Global Symbols
+; CHECK-NEXT: ============================================================
+
+; CHECK: Public Symbols
+; CHECK-NEXT: ============================================================
+
+; CHECK: Symbols
+; CHECK-NEXT: ============================================================
+
+; CHECK: Section Headers
+; CHECK-NEXT: ============================================================
+
+; CHECK: Original Section Headers
+; CHECK-NEXT: ============================================================
+
+; CHECK: Section Contributions
+; CHECK-NEXT: ============================================================
+
+; CHECK: Section Map
+; CHECK-NEXT: ============================================================
+
+

Added: llvm/trunk/test/tools/llvm-pdbutil/symbol-filters.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/symbol-filters.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/symbol-filters.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/symbol-filters.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,76 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=data %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=ONLY_DATA %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=thunks %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=ONLY_THUNKS %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=funcs %p/Inputs/FilterTest.pdb \
+; RUN:    | FileCheck --check-prefix=ONLY_FUNCS %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=funcs -sym-types=data \
+; RUN: %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=TWO_TYPES %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=data \
+; RUN: -symbol-order=name %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=NAME_SORT_DATA %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=data \
+; RUN: -symbol-order=size %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=SIZE_SORT_DATA %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=funcs \
+; RUN: -symbol-order=name %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=NAME_SORT_FUNCS %s
+
+; RUN: llvm-pdbutil pretty -globals -module-syms -sym-types=funcs \
+; RUN: -symbol-order=size %p/Inputs/FilterTest.pdb | FileCheck --check-prefix=SIZE_SORT_FUNCS %s
+
+; ONLY_DATA-NOT: func
+; ONLY_DATA-NOT: thunk
+; ONLY_DATA-DAG: data {{.*}} static char OneByte
+; ONLY_DATA-DAG: data {{.*}} static double DoubleGlobalVar
+; ONLY_DATA-DAG: data {{.*}} static char TwoBytes[2]
+; ONLY_DATA-DAG: data {{.*}} static char ThreeBytes[3]
+; ONLY_DATA-DAG: data {{.*}} static int IntGlobalVar
+; ONLY_DATA-DAG: data {{.*}} static GlobalEnum GlobalEnumVar
+
+; ONLY_FUNCS-NOT: data
+; ONLY_FUNCS-NOT: thunk
+; ONLY_FUNCS: func {{.*}} int __cdecl main(int argc, char** argv)
+; ONLY_FUNCS: func {{.*}} int __cdecl CFunc()
+; ONLY_FUNCS: func {{.*}} int __cdecl BFunc()
+; ONLY_FUNCS: func {{.*}} int __cdecl AFunc()
+; ONLY_FUNCS: func {{.*}} int FilterTestClass::foo()
+
+; ONLY_THUNKS-NOT: func
+; ONLY_THUNKS-NOT: data
+; ONLY_THUNKS-DAG: thunk {{.*}} (TrampIncremental)
+
+; TWO_TYPES-NOT: thunk
+; TWO_TYPES-DAG: func {{.*}} int __cdecl main(int argc, char** argv)
+; TWO_TYPES-DAG: data {{.*}} static double DoubleGlobalVar
+
+; NAME_SORT_DATA: data {{.*}} static double DoubleGlobalVar
+; NAME_SORT_DATA: data {{.*}} static GlobalEnum GlobalEnumVar
+; NAME_SORT_DATA: data {{.*}} static int IntGlobalVar
+; NAME_SORT_DATA: data {{.*}} static char OneByte
+; NAME_SORT_DATA: data {{.*}} static char ThreeBytes[3]
+; NAME_SORT_DATA: data {{.*}} static char TwoBytes[2]
+
+; SIZE_SORT_DATA: data {{.*}}sizeof=8{{.*}}double DoubleGlobalVar
+; SIZE_SORT_DATA-DAG: data {{.*}}sizeof=4{{.*}}GlobalEnum GlobalEnumVar
+; SIZE_SORT_DATA-DAG: data {{.*}}sizeof=4{{.*}}int IntGlobalVar
+; SIZE_SORT_DATA: data {{.*}}sizeof=3{{.*}}char ThreeBytes[3]
+; SIZE_SORT_DATA: data {{.*}}sizeof=2{{.*}}char TwoBytes[2]
+; SIZE_SORT_DATA: data {{.*}}sizeof=1{{.*}}char OneByte
+
+; NAME_SORT_FUNCS: func {{.*}}sizeof= 40{{.*}}AFunc
+; NAME_SORT_FUNCS: func {{.*}}sizeof= 10{{.*}}BFunc
+; NAME_SORT_FUNCS: func {{.*}}sizeof= 14{{.*}}CFunc
+; NAME_SORT_FUNCS: func {{.*}}sizeof= 16{{.*}}FilterTestClass::foo
+; NAME_SORT_FUNCS: func {{.*}}sizeof=  7{{.*}}main
+
+; SIZE_SORT_FUNCS: func {{.*}}sizeof= 40{{.*}}AFunc
+; SIZE_SORT_FUNCS: func {{.*}}sizeof= 16{{.*}}FilterTestClass::foo
+; SIZE_SORT_FUNCS: func {{.*}}sizeof= 14{{.*}}CFunc
+; SIZE_SORT_FUNCS: func {{.*}}sizeof= 10{{.*}}BFunc
+; SIZE_SORT_FUNCS: func {{.*}}sizeof=  7{{.*}}main

Added: llvm/trunk/test/tools/llvm-pdbutil/type-qualifiers.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/type-qualifiers.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/type-qualifiers.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/type-qualifiers.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,27 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -all -class-recurse-depth=1 \
+; RUN:   %p/Inputs/TypeQualifiersTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_FUNC
+; RUN: FileCheck -input-file=%t %s -check-prefix=GLOBALS_DATA
+; RUN: FileCheck -input-file=%t %s -check-prefix=QUALS
+
+; GLOBALS_FUNC: ---GLOBALS---
+; GLOBALS_FUNC-DAG: int __cdecl f(const volatile int* __restrict arg_crv)
+; GLOBALS_FUNC-DAG: void __cdecl g(int& __restrict arg_ref)
+
+; GLOBALS_DATA: ---GLOBALS---
+; GLOBALS_DATA-DAG: static volatile int* __restrict ArrayVar[10][100]
+; GLOBALS_DATA-DAG: static long* __restrict RestrictVar
+; GLOBALS_DATA-DAG: static const int* __restrict NS::p_object
+; GLOBALS_DATA-DAG: static NS::Foo NS::s
+; GLOBALS_DATA-DAG: static volatile int* __restrict NS::p_data_member
+
+; QUALS: ---TYPES---
+; QUALS-DAG: typedef volatile int*[100][10] RankNArray
+; QUALS-DAG: typedef long* __restrict RestrictTypedef
+; QUALS: union Union
+; QUALS-DAG: int* __restrict x_member
+; QUALS-DAG: float* __restrict y_member
+; QUALS-DAG: int* volatile __restrict m_volatile
+; QUALS-DAG: const char* m_const

Added: llvm/trunk/test/tools/llvm-pdbutil/type-server-no-dbi.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/type-server-no-dbi.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/type-server-no-dbi.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/type-server-no-dbi.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,46 @@
+
+RUN: llvm-pdbutil dump -all %p/Inputs/TypeServerTest.pdb | FileCheck %s --check-prefix=NO-DBI
+RUN: llvm-pdbutil pdb2yaml -all %p/Inputs/TypeServerTest.pdb > %t
+RUN: FileCheck --input-file=%t %s --check-prefix=NO-DBI-YAML
+
+NO-DBI-NOT: Native PDB Error: The specified stream could not be loaded.
+
+NO-DBI:                         Module Stats
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                      S_UDT Record Stats
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     Globals stream not present
+
+NO-DBI:                           Modules
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                            Files
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                            Lines
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                        Inlinee Lines
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                     Cross Module Imports
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+NO-DBI:                     Cross Module Exports
+NO-DBI-NEXT: ============================================================
+NO-DBI-NEXT:     DBI stream not present
+
+
+NO-DBI-YAML-NOT: Native PDB Error: The specified stream could not be loaded.
+
+NO-DBI-YAML: TpiStream:
+NO-DBI-YAML-NEXT:  Version:         VC80
+NO-DBI-YAML-NEXT:  Records:
+NO-DBI-YAML-NEXT:    - Kind:            LF_ARGLIST

Added: llvm/trunk/test/tools/llvm-pdbutil/usingnamespace.test
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-pdbutil/usingnamespace.test?rev=365515&view=auto
==============================================================================
--- llvm/trunk/test/tools/llvm-pdbutil/usingnamespace.test (added)
+++ llvm/trunk/test/tools/llvm-pdbutil/usingnamespace.test Tue Jul  9 10:14:24 2019
@@ -0,0 +1,8 @@
+; REQUIRES: diasdk
+
+; RUN: llvm-pdbutil pretty -module-syms %p/Inputs/UsingNamespaceTest.pdb > %t
+; RUN: FileCheck -input-file=%t %s
+
+; CHECK: ---SYMBOLS---
+; CHECK-NEXT: {{.*}}UsingNamespaceTest.obj
+; CHECK-DAG: using namespace NS




More information about the llvm-commits mailing list