1 // RUN: %clang_cc1 -fblocks -debug-info-kind=limited -gcodeview -emit-llvm %s -o - -triple=x86_64-pc-win32 -std=c++98 | \
2 // RUN: grep 'DISubprogram' | sed -e 's/.*name: "\([^"]*\)".*/"\1"/' | FileCheck %s
3
freefunc()4 void freefunc() { }
5 // CHECK-DAG: "freefunc"
6
7 namespace N {
b()8 int b() { return 0; }
9 // CHECK-DAG: "N::b"
func()10 namespace { void func() { } }
11 // CHECK-DAG: "N::`anonymous namespace'::func
12 }
13
_c(void)14 void _c(void) {
15 N::func();
16 }
17 // CHECK-DAG: "_c"
18
19 struct foo {
20 int operator+(int);
foofoo21 foo(){}
22 // CHECK-DAG: "foo::foo"
23
~foofoo24 ~foo(){}
25 // CHECK-DAG: "foo::~foo"
26
foofoo27 foo(int i){}
28 // CHECK-DAG: "foo::foo"
29
foofoo30 foo(char *q){}
31 // CHECK-DAG: "foo::foo"
32
static_methodfoo33 static foo* static_method() { return 0; }
34 // CHECK-DAG: "foo::static_method"
35
36 };
37
use_foo()38 void use_foo() {
39 foo f1, f2(1), f3((char*)0);
40 foo::static_method();
41 }
42
43 // CHECK-DAG: "foo::operator+"
operator +(int a)44 int foo::operator+(int a) { return a; }
45
46 // PR17371
47 struct OverloadedNewDelete {
48 // __cdecl
49 void *operator new(__SIZE_TYPE__);
50 void *operator new[](__SIZE_TYPE__);
51 void operator delete(void *);
52 void operator delete[](void *);
53 // __thiscall
54 int operator+(int);
55 };
56
operator new(__SIZE_TYPE__ s)57 void *OverloadedNewDelete::operator new(__SIZE_TYPE__ s) { return 0; }
operator new[](__SIZE_TYPE__ s)58 void *OverloadedNewDelete::operator new[](__SIZE_TYPE__ s) { return 0; }
operator delete(void *)59 void OverloadedNewDelete::operator delete(void *) { }
operator delete[](void *)60 void OverloadedNewDelete::operator delete[](void *) { }
operator +(int x)61 int OverloadedNewDelete::operator+(int x) { return x; };
62
63 // CHECK-DAG: "OverloadedNewDelete::operator new"
64 // CHECK-DAG: "OverloadedNewDelete::operator new[]"
65 // CHECK-DAG: "OverloadedNewDelete::operator delete"
66 // CHECK-DAG: "OverloadedNewDelete::operator delete[]"
67 // CHECK-DAG: "OverloadedNewDelete::operator+"
68
69 template <void (*)(void)>
fn_tmpl()70 void fn_tmpl() {}
71
72 template void fn_tmpl<freefunc>();
73 // CHECK-DAG: "fn_tmpl"
74