[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