[llvm-pdbdump] Resubmit "Add some tests for llvm-pdbdump".
authorZachary Turner <zturner@google.com>
Sun, 22 Feb 2015 06:47:32 +0000 (06:47 +0000)
committerZachary Turner <zturner@google.com>
Sun, 22 Feb 2015 06:47:32 +0000 (06:47 +0000)
NOTE: This patch intentionally breaks the build.  It attempts
to resubmit r230083, but with some debug logging in the CMake
and lit config files to determine why certain bots do not
correctly disable the DIA tests when DIA is not available.

After a sufficient number of bots fail, this patch will either
be reverted or, if the cause of the failure becomes obvious,
a fix submitted with the log statements removed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230161 91177308-0d34-0410-b5e6-96231b3b80d8

cmake/config-ix.cmake
test/DebugInfo/PDB/Inputs/empty.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/empty.pdb [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat.cpp [new file with mode: 0644]
test/DebugInfo/PDB/Inputs/symbolformat.pdb [new file with mode: 0644]
test/DebugInfo/PDB/lit.local.cfg [new file with mode: 0644]
test/DebugInfo/PDB/pdbdump-flags.test [new file with mode: 0644]
test/DebugInfo/PDB/pdbdump-symbol-format.test [new file with mode: 0644]
test/lit.site.cfg.in

index 8b04d087d44ebd266d71c32f647e97d1bb7faa5d..337a5a7da8f73535f95a019125b398e5bdade427 100755 (executable)
@@ -448,6 +448,8 @@ if( MSVC )
   endif()
 endif( MSVC )
 
+message("CMake set HAVE_DIA_SDK to ${HAVE_DIA_SDK}")
+
 if( PURE_WINDOWS )
   CHECK_CXX_SOURCE_COMPILES("
     #include <windows.h>
diff --git a/test/DebugInfo/PDB/Inputs/empty.cpp b/test/DebugInfo/PDB/Inputs/empty.cpp
new file mode 100644 (file)
index 0000000..6021aca
--- /dev/null
@@ -0,0 +1,7 @@
+// Build with "cl.exe /Zi empty.cpp /link /debug /nodefaultlib /entry:main"
+
+void *__purecall = 0;
+
+int main() {
+  return 42;
+}
diff --git a/test/DebugInfo/PDB/Inputs/empty.pdb b/test/DebugInfo/PDB/Inputs/empty.pdb
new file mode 100644 (file)
index 0000000..ae65c3a
Binary files /dev/null and b/test/DebugInfo/PDB/Inputs/empty.pdb differ
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp b/test/DebugInfo/PDB/Inputs/symbolformat-fpo.cpp
new file mode 100644 (file)
index 0000000..56a5b26
--- /dev/null
@@ -0,0 +1,6 @@
+// Compile with "cl /GR- /Zi /c /Ox /Oy symbolformat-fpo.cpp"
+// Refer to symbolformat.cpp for linking instructions.
+
+unsigned fpo_func(unsigned n) {
+  return n * 2;
+}
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.cpp b/test/DebugInfo/PDB/Inputs/symbolformat.cpp
new file mode 100644 (file)
index 0000000..1aa8652
--- /dev/null
@@ -0,0 +1,24 @@
+// Compile with "cl /c /Zi /GR- symbolformat.cpp"
+// Compile symbolformat-fpo.cpp (see file for instructions)
+// Link with "link symbolformat.obj symbolformat-fpo.obj /debug /nodefaultlib
+//    /entry:main /out:symbolformat.exe"
+
+int __cdecl _purecall(void) { return 0; }
+
+struct A {
+  virtual void PureFunc() = 0 {}
+  virtual void VirtualFunc() {}
+  void RegularFunc() {}
+};
+
+struct B : public A {
+  void PureFunc() override {}
+};
+
+int main(int argc, char **argv) {
+  B b;
+  auto PureAddr = &B::PureFunc;
+  auto VirtualAddr = &A::PureFunc;
+  auto RegularAddr = &A::RegularFunc;
+  return 0;
+}
diff --git a/test/DebugInfo/PDB/Inputs/symbolformat.pdb b/test/DebugInfo/PDB/Inputs/symbolformat.pdb
new file mode 100644 (file)
index 0000000..3bbc7bb
Binary files /dev/null and b/test/DebugInfo/PDB/Inputs/symbolformat.pdb differ
diff --git a/test/DebugInfo/PDB/lit.local.cfg b/test/DebugInfo/PDB/lit.local.cfg
new file mode 100644 (file)
index 0000000..456fc71
--- /dev/null
@@ -0,0 +1,2 @@
+config.unsupported = not config.have_dia_sdk
+print("lit.local.cfg: config.unsupported set to %s" % config.unsupported)
diff --git a/test/DebugInfo/PDB/pdbdump-flags.test b/test/DebugInfo/PDB/pdbdump-flags.test
new file mode 100644 (file)
index 0000000..fd14e8a
--- /dev/null
@@ -0,0 +1,14 @@
+; RUN: llvm-pdbdump %p/Inputs/empty.pdb | FileCheck %s -check-prefix SUMMARY_CHECK
+; RUN: llvm-pdbdump -functions %p/Inputs/empty.pdb | FileCheck %s -check-prefix MAIN_CHECK
+
+; Check PDB file summary information
+; SUMMARY_CHECK: empty.pdb
+; SUMMARY_CHECK: Guid: {0B355641-86A0-A249-896F-9988FAE52FF0}
+; SUMMARY_CHECK: Attributes: HasPrivateSymbols
+
+; Check that running with only -compilands doesn't include unwanted symbol types
+; MAIN_CHECK: (EBP) int32_t __cdecl main()
+; MAIN_CHECK-NOT: vtbl:
+; MAIN_CHECK-NOT: enum:
+; MAIN_CHECK-NOT: class:
+; MAIN_CHECK-NOT: data:
diff --git a/test/DebugInfo/PDB/pdbdump-symbol-format.test b/test/DebugInfo/PDB/pdbdump-symbol-format.test
new file mode 100644 (file)
index 0000000..64753df
--- /dev/null
@@ -0,0 +1,14 @@
+; RUN: llvm-pdbdump -all -hidden -group-by=compiland %p/Inputs/symbolformat.pdb | FileCheck --check-prefix=FORMAT %s
+
+; The format here is func [0x<rva_start>+<prologue_length> - 0x<rva_end>-<epilogue_length>]
+; FORMAT: test\DebugInfo\PDB\Inputs\symbolformat-fpo.obj
+; FORMAT-DAG: func [0x001130+0 - 0x001137-1] (VFrame) uint32_t __cdecl fpo_func(uint32_t)
+; FORMAT: d:\src\llvm\test\DebugInfo\PDB\Inputs\symbolformat.obj
+; FORMAT-DAG: func [0x001060+3 - 0x001067-2] (EBP) int32_t __cdecl _purecall()
+; FORMAT-DAG: func [0x001070+6 - 0x001099-4] (EBP) int32_t __cdecl main(int32_t, char**)
+; FORMAT-DAG: func [0x0010b0+7 - 0x0010c7-4] (EBP) void __thiscall A::A()
+; FORMAT-DAG: func [0x0010d0+7 - 0x0010ef-4] (EBP) void __thiscall B::B()
+; FORMAT-DAG: thunk [0x000010f6 - 0x000010fa] (Pcode) B::`vcall'{0}'
+; FORMAT-DAG: func [0x001100+7 - 0x00110b-4] (EBP) virtual void __thiscall B::PureFunc()
+; FORMAT-DAG: func [0x001110+7 - 0x00111b-4] (EBP) void __thiscall A::RegularFunc()
+; FORMAT-DAG: func [0x001120+7 - 0x00112b-4] (EBP) virtual void __thiscall A::VirtualFunc()
index 9336c76369a7bb48f8279d71f9664838213b86fc..98544289d42bf88022ec9050d29ab55bed58d9cf 100644 (file)
@@ -31,8 +31,11 @@ config.host_ldflags = "@HOST_LDFLAGS@"
 config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
 config.llvm_use_sanitizer = "@LLVM_USE_SANITIZER@"
 config.have_zlib = "@HAVE_LIBZ@"
+config.have_dia_sdk = "@HAVE_DIA_SDK@"
 config.enable_ffi = "@LLVM_ENABLE_FFI@"
 
+print("lit.site.cfg.in: config.have_dia_sdk set to %s" % config.have_dia_sdk)
+
 # Support substitution of the tools_dir with user parameters. This is
 # used when we can't determine the tool dir at configuration time.
 try: