diff options
author | Reid Kleckner <rnk@google.com> | 2015-12-16 02:04:40 +0000 |
---|---|---|
committer | Reid Kleckner <rnk@google.com> | 2015-12-16 02:04:40 +0000 |
commit | 60103383f097b6580ecb4519eeb87defdb7c05c9 (patch) | |
tree | 592405e251c513e97e39793318334ce622ee79e4 /clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp | |
parent | 23319014a9a795dd6b19ee4773aca14989dc5f65 (diff) | |
download | bcm5719-llvm-60103383f097b6580ecb4519eeb87defdb7c05c9.tar.gz bcm5719-llvm-60103383f097b6580ecb4519eeb87defdb7c05c9.zip |
Print qualified display names when emitting CodeView
This is what debuggers expect. Words towards fixing PR21528.
llvm-svn: 255744
Diffstat (limited to 'clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp')
-rw-r--r-- | clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp b/clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp new file mode 100644 index 00000000000..1d0300c76c0 --- /dev/null +++ b/clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp @@ -0,0 +1,73 @@ +// RUN: %clang_cc1 -fblocks -debug-info-kind=limited -gcodeview -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++98 | \ +// RUN: grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | FileCheck %s + +void freefunc() { } +// CHECK-DAG: "freefunc" + +namespace N { + int b() { return 0; } +// CHECK-DAG: "N::b" + namespace { void func() { } } +// CHECK-DAG: "N::`anonymous namespace'::func +} + +void _c(void) { + N::func(); +} +// CHECK-DAG: "_c" + +struct foo { + int operator+(int); + foo(){} +// CHECK-DAG: "foo::foo" + + ~foo(){} +// CHECK-DAG: "foo::~foo" + + foo(int i){} +// CHECK-DAG: "foo::foo" + + foo(char *q){} +// CHECK-DAG: "foo::foo" + + static foo* static_method() { return 0; } +// CHECK-DAG: "foo::static_method" + +}; + +void use_foo() { + foo f1, f2(1), f3((char*)0); + foo::static_method(); +} + +// CHECK-DAG: "foo::operator+" +int foo::operator+(int a) { return a; } + +// PR17371 +struct OverloadedNewDelete { + // __cdecl + void *operator new(__SIZE_TYPE__); + void *operator new[](__SIZE_TYPE__); + void operator delete(void *); + void operator delete[](void *); + // __thiscall + int operator+(int); +}; + +void *OverloadedNewDelete::operator new(__SIZE_TYPE__ s) { return 0; } +void *OverloadedNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; } +void OverloadedNewDelete::operator delete(void *) { } +void OverloadedNewDelete::operator delete[](void *) { } +int OverloadedNewDelete::operator+(int x) { return x; }; + +// CHECK-DAG: "OverloadedNewDelete::operator new" +// CHECK-DAG: "OverloadedNewDelete::operator new[]" +// CHECK-DAG: "OverloadedNewDelete::operator delete" +// CHECK-DAG: "OverloadedNewDelete::operator delete[]" +// CHECK-DAG: "OverloadedNewDelete::operator+" + +template <void (*)(void)> +void fn_tmpl() {} + +template void fn_tmpl<freefunc>(); +// CHECK-DAG: "fn_tmpl" |