summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorAaron Smith <aaron.smith@microsoft.com>2018-01-17 01:22:03 +0000
committerAaron Smith <aaron.smith@microsoft.com>2018-01-17 01:22:03 +0000
commit53a1a1616cb7fef1e34973a5702a8e1aebb6fbce (patch)
tree1c8131a9aadecd1131bd8bad5beae267ce67b4aa /llvm/test
parent7351a22b7de47db8fc7bcb2aaffb752d313cc3b7 (diff)
downloadbcm5719-llvm-53a1a1616cb7fef1e34973a5702a8e1aebb6fbce.tar.gz
bcm5719-llvm-53a1a1616cb7fef1e34973a5702a8e1aebb6fbce.zip
Fix pretty printing the unspecified param of a variadic function
Summary: - Fix a bug in PrettyBuiltinDumper that returns "void" as the name for an unspecified builtin type. Since the unspecified param of a variadic function is considered a builtin of unspecified type in PDBs, we set "..." for its name. - Provide a method to determine if a PDBSymbolFunc is variadic in PrettyFunctionDumper since PDBSymbolFunc::getArgument() doesn't return the last unspecified-type param. - Add a pretty-func-dumper.test to test pretty dumping of variadic functions. Reviewers: zturner, llvm-commits Reviewed By: zturner Differential Revision: https://reviews.llvm.org/D41801 llvm-svn: 322608
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.cpp49
-rw-r--r--llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.pdb0
-rw-r--r--llvm/test/tools/llvm-pdbdump/pretty-func-dumper.test25
3 files changed, 74 insertions, 0 deletions
diff --git a/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.cpp b/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.cpp
new file mode 100644
index 00000000000..8d9453c51b0
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.cpp
@@ -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;
+}
diff --git a/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.pdb b/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.pdb
new file mode 100644
index 00000000000..e69de29bb2d
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/Inputs/PrettyFuncDumperTest.pdb
diff --git a/llvm/test/tools/llvm-pdbdump/pretty-func-dumper.test b/llvm/test/tools/llvm-pdbdump/pretty-func-dumper.test
new file mode 100644
index 00000000000..5e4dc8d998b
--- /dev/null
+++ b/llvm/test/tools/llvm-pdbdump/pretty-func-dumper.test
@@ -0,0 +1,25 @@
+; 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
OpenPOWER on IntegriCloud