xref: /llvm-project/lldb/test/Shell/SymbolFile/NativePDB/find-functions.cpp (revision a3a8ed33a1d6a5047aae29790e02f3c7955297af)
1 // clang-format off
2 // REQUIRES: lld, x86
3 
4 // RUN: %clang_cl --target=x86_64-windows-msvc -Od -Z7 -c /GR- /Fo%t.obj -- %s
5 // RUN: lld-link -debug:full -nodefaultlib -entry:main %t.obj -out:%t.exe -pdb:%t.pdb
6 
7 // RUN: lldb-test symbols --find=function --name=main --function-flags=full %t.exe \
8 // RUN:     | FileCheck %s --check-prefix=FIND-MAIN
9 
10 // RUN: lldb-test symbols --find=function --name=static_fn --function-flags=full %t.exe \
11 // RUN:     | FileCheck %s --check-prefix=FIND-STATIC
12 
13 // RUN: lldb-test symbols --find=function --name=varargs_fn --function-flags=full %t.exe \
14 // RUN:     | FileCheck %s --check-prefix=FIND-VAR
15 
16 // RUN: lldb-test symbols --find=function --name=Struct::simple_method --function-flags=full %t.exe \
17 // RUN:     | FileCheck %s --check-prefix=FIND-SIMPLE
18 
19 // RUN: lldb-test symbols --find=function --name=Struct::virtual_method --function-flags=full %t.exe \
20 // RUN:     | FileCheck %s --check-prefix=FIND-VIRTUAL
21 
22 // RUN: lldb-test symbols --find=function --name=Struct::static_method --function-flags=full %t.exe \
23 // RUN:     | FileCheck %s --check-prefix=FIND-STATIC-METHOD
24 
25 // RUN: lldb-test symbols --find=function --name=Struct::overloaded_method --function-flags=full %t.exe \
26 // RUN:     | FileCheck %s --check-prefix=FIND-OVERLOAD
27 
28 struct Struct {
simple_methodStruct29   int simple_method() {
30     return 1;
31   }
32 
virtual_methodStruct33   virtual int virtual_method() {
34     return 2;
35   }
36 
static_methodStruct37   static int static_method() {
38     return 3;
39   }
40 
overloaded_methodStruct41   int overloaded_method() {
42     return 4 + overloaded_method('a') + overloaded_method('a', 1);
43   }
44 protected:
overloaded_methodStruct45   virtual int overloaded_method(char c) {
46     return 5;
47   }
48 private:
overloaded_methodStruct49   static int overloaded_method(char c, int i, ...) {
50     return 6;
51   }
52 };
53 
54 Struct s;
55 
static_fn()56 static int static_fn() {
57   return 42;
58 }
59 
varargs_fn(int x,int y,...)60 int varargs_fn(int x, int y, ...) {
61   return x + y;
62 }
63 
main(int argc,char ** argv)64 int main(int argc, char **argv) {
65   return static_fn() + varargs_fn(argc, argc) + s.simple_method() +
66   Struct::static_method() + s.virtual_method() + s.overloaded_method();
67 }
68 
69 // FIND-MAIN:      Function: id = {{.*}}, name = "main"
70 // FIND-MAIN-NEXT: FuncType: id = {{.*}}, compiler_type = "int (int, char **)"
71 
72 // FIND-STATIC:      Function: id = {{.*}}, name = "{{.*}}static_fn{{.*}}"
73 // FIND-STATIC-NEXT: FuncType: id = {{.*}}, compiler_type = "int (void)"
74 
75 // FIND-VAR:      Function: id = {{.*}}, name = "{{.*}}varargs_fn{{.*}}"
76 // FIND-VAR-NEXT: FuncType: id = {{.*}}, compiler_type = "int (int, int, ...)"
77 
78 // FIND-SIMPLE:      Function: id = {{.*}}, name = "{{.*}}Struct::simple_method{{.*}}"
79 // FIND-SIMPLE-NEXT: FuncType: id = {{.*}}, compiler_type = "int (void)"
80 
81 // FIND-VIRTUAL:      Function: id = {{.*}}, name = "{{.*}}Struct::virtual_method{{.*}}"
82 // FIND-VIRTUAL-NEXT: FuncType: id = {{.*}}, compiler_type = "int (void)"
83 
84 // FIND-STATIC-METHOD:      Function: id = {{.*}}, name = "{{.*}}Struct::static_method{{.*}}"
85 // FIND-STATIC-METHOD-NEXT: FuncType: id = {{.*}}, compiler_type = "int (void)"
86 
87 // FIND-OVERLOAD: Function: id = {{.*}}, name = "{{.*}}Struct::overloaded_method{{.*}}"
88 // FIND-OVERLOAD: FuncType: id = {{.*}}, compiler_type = "int (void)"
89 // FIND-OVERLOAD: FuncType: id = {{.*}}, compiler_type = "int (char)"
90 // FIND-OVERLOAD: FuncType: id = {{.*}}, compiler_type = "int (char, int, ...)"
91