From 60103383f097b6580ecb4519eeb87defdb7c05c9 Mon Sep 17 00:00:00 2001 From: Reid Kleckner Date: Wed, 16 Dec 2015 02:04:40 +0000 Subject: Print qualified display names when emitting CodeView This is what debuggers expect. Words towards fixing PR21528. llvm-svn: 255744 --- .../debug-info-codeview-display-name.cpp | 73 ++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp (limited to 'clang/test/CodeGenCXX/debug-info-codeview-display-name.cpp') 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 fn_tmpl() {} + +template void fn_tmpl(); +// CHECK-DAG: "fn_tmpl" -- cgit v1.2.3