18a64d80aSDavid Spickett // REQUIRES: lld
28a64d80aSDavid Spickett 
38a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t.o --target=x86_64-pc-linux -gno-pubnames
48a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
58a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
68a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
78a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
88a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
98a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
108a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL %s
118a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
128a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
13*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
14*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
15*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
16*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
178a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
188a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
198a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
208a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
218a64d80aSDavid Spickett //
228a64d80aSDavid Spickett // RUN: %clang %s -g -c -o %t --target=x86_64-apple-macosx
238a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
248a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
258a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
268a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
278a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
28*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL %s
298a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
308a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
31*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
32*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
33*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
34*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
358a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
368a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
378a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
388a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
398a64d80aSDavid Spickett 
408a64d80aSDavid Spickett // RUN: %clang %s -c -o %t.o --target=x86_64-pc-linux -gdwarf-5 -gpubnames
418a64d80aSDavid Spickett // RUN: ld.lld %t.o -o %t
428a64d80aSDavid Spickett // RUN: llvm-readobj --sections %t | FileCheck %s --check-prefix NAMES
438a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=base %t | \
448a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=BASE %s
458a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=method %t | \
468a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=METHOD %s
478a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --find=function --function-flags=full %t | \
48*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL %s
498a64d80aSDavid Spickett // RUN: lldb-test symbols --name=_Z3fooi --find=function --function-flags=full %t | \
508a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=FULL-MANGLED %s
51*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN3bar3baz3fooEv --find=function --function-flags=full %t | \
52*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-NAMESPACE %s
53*f968bd77SJaroslav Sevcik // RUN: lldb-test symbols --name=_ZN4sbar3fooEi --find=function --function-flags=full %t | \
54*f968bd77SJaroslav Sevcik // RUN:   FileCheck --check-prefix=FULL-MANGLED-METHOD %s
558a64d80aSDavid Spickett // RUN: lldb-test symbols --name=foo --context=context --find=function --function-flags=base %t | \
568a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=CONTEXT %s
578a64d80aSDavid Spickett // RUN: lldb-test symbols --name=not_there --find=function %t | \
588a64d80aSDavid Spickett // RUN:   FileCheck --check-prefix=EMPTY %s
598a64d80aSDavid Spickett 
608a64d80aSDavid Spickett // NAMES: Name: .debug_names
618a64d80aSDavid Spickett 
628a64d80aSDavid Spickett // BASE: Found 4 functions:
638a64d80aSDavid Spickett // BASE-DAG: name = "foo()", mangled = "_Z3foov"
648a64d80aSDavid Spickett // BASE-DAG: name = "foo(int)", mangled = "_Z3fooi"
658a64d80aSDavid Spickett // BASE-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
668a64d80aSDavid Spickett // BASE-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
678a64d80aSDavid Spickett 
688a64d80aSDavid Spickett // METHOD: Found 3 functions:
698a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo()", mangled = "_ZN4sbar3fooEv"
708a64d80aSDavid Spickett // METHOD-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
718a64d80aSDavid Spickett // METHOD-DAG: name = "ffbar()::sbaz::foo()", mangled = "_ZZ5ffbarvEN4sbaz3fooEv"
728a64d80aSDavid Spickett 
738a64d80aSDavid Spickett // FULL: Found 0 functions:
748a64d80aSDavid Spickett 
758a64d80aSDavid Spickett // FULL-MANGLED: Found 1 functions:
768a64d80aSDavid Spickett // FULL-MANGLED-DAG: name = "foo(int)", mangled = "_Z3fooi"
778a64d80aSDavid Spickett 
78*f968bd77SJaroslav Sevcik // FULL-MANGLED-NAMESPACE: Found 1 functions:
79*f968bd77SJaroslav Sevcik // FULL-MANGLED-NAMESPACE-DAG: name = "bar::baz::foo()", mangled = "_ZN3bar3baz3fooEv"
80*f968bd77SJaroslav Sevcik 
81*f968bd77SJaroslav Sevcik // FULL-MANGLED-METHOD: Found 1 functions:
82*f968bd77SJaroslav Sevcik // FULL-MANGLED-METHOD-DAG: name = "sbar::foo(int)", mangled = "_ZN4sbar3fooEi"
83*f968bd77SJaroslav Sevcik 
848a64d80aSDavid Spickett // CONTEXT: Found 1 functions:
858a64d80aSDavid Spickett // CONTEXT-DAG: name = "bar::foo()", mangled = "_ZN3bar3fooEv"
868a64d80aSDavid Spickett 
878a64d80aSDavid Spickett // EMPTY: Found 0 functions:
888a64d80aSDavid Spickett 
foo()898a64d80aSDavid Spickett void foo() {}
foo(int)908a64d80aSDavid Spickett void foo(int) {}
918a64d80aSDavid Spickett 
928a64d80aSDavid Spickett namespace bar {
938a64d80aSDavid Spickett int context;
foo()948a64d80aSDavid Spickett void foo() {}
958a64d80aSDavid Spickett namespace baz {
foo()968a64d80aSDavid Spickett void foo() {}
978a64d80aSDavid Spickett } // namespace baz
988a64d80aSDavid Spickett } // namespace bar
998a64d80aSDavid Spickett 
1008a64d80aSDavid Spickett struct foo {};
fbar(struct foo)1018a64d80aSDavid Spickett void fbar(struct foo) {}
1028a64d80aSDavid Spickett 
Foo()1038a64d80aSDavid Spickett void Foo() {}
1048a64d80aSDavid Spickett 
1058a64d80aSDavid Spickett struct sbar {
1068a64d80aSDavid Spickett   void foo();
1078a64d80aSDavid Spickett   static void foo(int);
1088a64d80aSDavid Spickett };
foo()1098a64d80aSDavid Spickett void sbar::foo() {}
foo(int)1108a64d80aSDavid Spickett void sbar::foo(int) {}
1118a64d80aSDavid Spickett 
ffbar()1128a64d80aSDavid Spickett void ffbar() {
1138a64d80aSDavid Spickett   struct sbaz {
1148a64d80aSDavid Spickett     void foo() {}
1158a64d80aSDavid Spickett   };
1168a64d80aSDavid Spickett   sbaz a;
1178a64d80aSDavid Spickett   a.foo();
1188a64d80aSDavid Spickett }
1198a64d80aSDavid Spickett 
_start()1208a64d80aSDavid Spickett extern "C" void _start() {}
121