1*8a64d80aSDavid Spickett // REQUIRES: lld
2*8a64d80aSDavid Spickett 
3*8a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t.o --target=x86_64-pc-linux -gno-pubnames
4*8a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
5*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
6*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
7*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
8*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
9*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
10*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL %s
11*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
12*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
13*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
14*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
15*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
16*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
17*8a64d80aSDavid Spickett //
18*8a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t --target=x86_64-apple-macosx
19*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
20*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
21*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
22*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
23*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
24*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-INDEXED %s
25*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
26*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
27*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
28*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
29*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
30*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
31*8a64d80aSDavid Spickett 
32*8a64d80aSDavid Spickett // RUN: %clang %s -c -o %t.o --target=x86_64-pc-linux -gdwarf-5 -gpubnames
33*8a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
34*8a64d80aSDavid Spickett // RUN: llvm-readobj --sections %t | FileCheck %s --check-prefix NAMES
35*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
36*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
37*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
38*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
39*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
40*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-INDEXED %s
41*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
42*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
43*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
44*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
45*8a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
46*8a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
47*8a64d80aSDavid Spickett 
48*8a64d80aSDavid Spickett // NAMES: Name: .debug_names
49*8a64d80aSDavid Spickett 
50*8a64d80aSDavid Spickett // BASE: Found 4 functions:
51*8a64d80aSDavid Spickett // BASE-DAG: name = "foo()", mangled = "_Z3foov"
52*8a64d80aSDavid Spickett // BASE-DAG: name = "foo(int)", mangled = "_Z3fooi"
53*8a64d80aSDavid Spickett // BASE-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
54*8a64d80aSDavid Spickett // BASE-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
55*8a64d80aSDavid Spickett 
56*8a64d80aSDavid Spickett // METHOD: Found 3 functions:
57*8a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo()", mangled = "_ZN4sbar3fooEv"
58*8a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
59*8a64d80aSDavid Spickett // METHOD-DAG: name = "ffbar()::sbaz::foo()", mangled = "_ZZ5ffbarvEN4sbaz3fooEv"
60*8a64d80aSDavid Spickett 
61*8a64d80aSDavid Spickett // FULL-INDEXED: Found 7 functions:
62*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "foo()", mangled = "_Z3foov"
63*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "foo(int)", mangled = "_Z3fooi"
64*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
65*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
66*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "sbar::foo()", mangled = "_ZN4sbar3fooEv"
67*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
68*8a64d80aSDavid Spickett // FULL-INDEXED-DAG: name = "ffbar()::sbaz::foo()", mangled = "_ZZ5ffbarvEN4sbaz3fooEv"
69*8a64d80aSDavid Spickett 
70*8a64d80aSDavid Spickett // FULL: Found 0 functions:
71*8a64d80aSDavid Spickett 
72*8a64d80aSDavid Spickett // FULL-MANGLED: Found 1 functions:
73*8a64d80aSDavid Spickett // FULL-MANGLED-DAG: name = "foo(int)", mangled = "_Z3fooi"
74*8a64d80aSDavid Spickett 
75*8a64d80aSDavid Spickett // CONTEXT: Found 1 functions:
76*8a64d80aSDavid Spickett // CONTEXT-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
77*8a64d80aSDavid Spickett 
78*8a64d80aSDavid Spickett // EMPTY: Found 0 functions:
79*8a64d80aSDavid Spickett 
80*8a64d80aSDavid Spickett void foo() {}
81*8a64d80aSDavid Spickett void foo(int) {}
82*8a64d80aSDavid Spickett 
83*8a64d80aSDavid Spickett namespace bar {
84*8a64d80aSDavid Spickett int context;
85*8a64d80aSDavid Spickett void foo() {}
86*8a64d80aSDavid Spickett namespace baz {
87*8a64d80aSDavid Spickett void foo() {}
88*8a64d80aSDavid Spickett } // namespace baz
89*8a64d80aSDavid Spickett } // namespace bar
90*8a64d80aSDavid Spickett 
91*8a64d80aSDavid Spickett struct foo {};
92*8a64d80aSDavid Spickett void fbar(struct foo) {}
93*8a64d80aSDavid Spickett 
94*8a64d80aSDavid Spickett void Foo() {}
95*8a64d80aSDavid Spickett 
96*8a64d80aSDavid Spickett struct sbar {
97*8a64d80aSDavid Spickett   void foo();
98*8a64d80aSDavid Spickett   static void foo(int);
99*8a64d80aSDavid Spickett };
100*8a64d80aSDavid Spickett void sbar::foo() {}
101*8a64d80aSDavid Spickett void sbar::foo(int) {}
102*8a64d80aSDavid Spickett 
103*8a64d80aSDavid Spickett void ffbar() {
104*8a64d80aSDavid Spickett   struct sbaz {
105*8a64d80aSDavid Spickett     void foo() {}
106*8a64d80aSDavid Spickett   };
107*8a64d80aSDavid Spickett   sbaz a;
108*8a64d80aSDavid Spickett   a.foo();
109*8a64d80aSDavid Spickett }
110*8a64d80aSDavid Spickett 
111*8a64d80aSDavid Spickett extern "C" void _start() {}
112