diff options
| author | Aaron Smith <aaron.smith@microsoft.com> | 2018-01-17 01:22:03 +0000 |
|---|---|---|
| committer | Aaron Smith <aaron.smith@microsoft.com> | 2018-01-17 01:22:03 +0000 |
| commit | 53a1a1616cb7fef1e34973a5702a8e1aebb6fbce (patch) | |
| tree | 1c8131a9aadecd1131bd8bad5beae267ce67b4aa /llvm/test | |
| parent | 7351a22b7de47db8fc7bcb2aaffb752d313cc3b7 (diff) | |
| download | bcm5719-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')
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 |

