1# clang-format off 2# REQUIRES: lld, x86 3 4# RUN: llvm-mc -triple=x86_64-windows-msvc --filetype=obj %p/Inputs/inline_sites.s > %t.obj 5# RUN: lld-link -debug:full -nodefaultlib -entry:main -base:0x140000000 %t.obj -out:%t.exe 6# RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \ 7# RUN: %p/Inputs/inline_sites.lldbinit 2>&1 | FileCheck %s 8 9# CHECK: (lldb) image dump line-table a.cpp -v 10# CHECK-NEXT: Line table 11# CHECK-NEXT: 0x0000000140001000: /tmp/a.cpp:2 12# CHECK-NEXT: 0x0000000140001004: /tmp/a.h:5, is_start_of_statement = TRUE, is_prologue_end = TRUE 13# CHECK-NEXT: 0x000000014000100c: /tmp/a.h:6 14# CHECK-NEXT: 0x0000000140001010: /tmp/a.h:7 15# CHECK-NEXT: 0x0000000140001018: /tmp/a.h:9 16# CHECK-NEXT: 0x000000014000101c: /tmp/b.h:5, is_start_of_statement = TRUE, is_prologue_end = TRUE 17# CHECK-NEXT: 0x0000000140001022: /tmp/b.h:6 18# CHECK-NEXT: 0x0000000140001026: /tmp/b.h:7 19# CHECK-NEXT: 0x000000014000102a: /tmp/c.h:5, is_start_of_statement = TRUE, is_prologue_end = TRUE 20# CHECK-NEXT: 0x0000000140001031: /tmp/c.h:6 21# CHECK-NEXT: 0x0000000140001035: /tmp/c.h:7 22# CHECK-NEXT: 0x0000000140001039: /tmp/a.cpp:3 23# CHECK-NEXT: 0x000000014000103d: /tmp/a.cpp:4 24# CHECK-NEXT: 0x0000000140001044: /tmp/a.h:8, is_start_of_statement = TRUE 25# CHECK-NEXT: 0x0000000140001046: /tmp/a.cpp:4, is_terminal_entry = TRUE 26 27#CHECK: (lldb) b a.h:5 28#CHECK: Breakpoint 1: where = {{.*}}`main + 4 [inlined] Namespace1::foo at a.h:5, address = 0x0000000140001004 29#CHECK: (lldb) b a.h:6 30#CHECK: Breakpoint 2: where = {{.*}}`main + 12 [inlined] Namespace1::foo + 8 at a.h:6, address = 0x000000014000100c 31#CHECK: (lldb) b a.h:7 32#CHECK: Breakpoint 3: where = {{.*}}`main + 16 [inlined] Namespace1::foo + 12 at a.h:7, address = 0x0000000140001010 33#CHECK: (lldb) b a.h:8 34#CHECK: Breakpoint 4: where = {{.*}}`main + 68 [inlined] Namespace1::foo at a.h:8, address = 0x0000000140001044 35#CHECK: (lldb) b a.h:9 36#CHECK: Breakpoint 5: where = {{.*}}`main + 24 [inlined] Namespace1::foo + 20 at a.h:9, address = 0x0000000140001018 37#CHECK: (lldb) b b.h:5 38#CHECK: Breakpoint 6: where = {{.*}}`main + 28 [inlined] Class1::bar at b.h:5, address = 0x000000014000101c 39#CHECK: (lldb) b b.h:6 40#CHECK: Breakpoint 7: where = {{.*}}`main + 34 [inlined] Class1::bar + 6 at b.h:6, address = 0x0000000140001022 41#CHECK: (lldb) b b.h:7 42#CHECK: Breakpoint 8: where = {{.*}}`main + 38 [inlined] Class1::bar + 10 at b.h:7, address = 0x0000000140001026 43#CHECK: (lldb) b c.h:5 44#CHECK: Breakpoint 9: where = {{.*}}`main + 42 [inlined] Namespace2::Class2::func at c.h:5, address = 0x000000014000102a 45#CHECK: (lldb) b c.h:6 46#CHECK: Breakpoint 10: where = {{.*}}`main + 49 [inlined] Namespace2::Class2::func + 7 at c.h:6, address = 0x0000000140001031 47#CHECK: (lldb) b c.h:7 48#CHECK: Breakpoint 11: where = {{.*}}`main + 53 [inlined] Namespace2::Class2::func + 11 at c.h:7, address = 0x0000000140001035 49#CHECK: (lldb) b a.cpp:3 50#CHECK: Breakpoint 12: where = {{.*}}`main + 57 at a.cpp:3, address = 0x0000000140001039 51#CHECK: (lldb) b a.cpp:4 52#CHECK: Breakpoint 13: where = {{.*}}`main + 61 at a.cpp:4, address = 0x000000014000103d 53#CHECK: (lldb) b a.h:8 54#CHECK: Breakpoint 14: where = {{.*}}`main + 68 [inlined] Namespace1::foo at a.h:8, address = 0x0000000140001044 55 56# CEHCK-LABEL: (lldb) image lookup -a 0x140001003 -v 57# CHECK: Summary: {{.*}}`main + 3 at a.cpp:2 58# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 59# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 60# CHECK: LineEntry: [0x0000000140001000-0x0000000140001004): /tmp/a.cpp:2 61# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001000-0x000000014000102d) 62# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 63 64# CEHCK-LABEL: (lldb) image lookup -a 0x140001004 -v 65# CHECK: Summary: {{.*}}`main + 4 [inlined] Namespace1::foo at a.h:5 66# CHECK-NEXT: {{.*}}`main + 4 at a.cpp:3 67# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 68# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 69# CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001039)[0x140001044-0x140001046), name = "Namespace1::foo", decl = a.h:4 70# CHECK: LineEntry: [0x0000000140001004-0x000000014000100c): /tmp/a.h:5 71# CHECK-NEXT: Variable: id = {{.*}}, name = "foo_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001039) 72# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001000-0x000000014000102d) 73# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 74# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 75 76# CEHCK-LABEL: (lldb) image lookup -a 0x140001010 -v 77# CHECK: Summary: {{.*}}`main + 16 [inlined] Namespace1::foo + 12 at a.h:7 78# CHECK-NEXT: {{.*}}`main + 4 at a.cpp:3 79# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 80# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 81# CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001039)[0x140001044-0x140001046), name = "Namespace1::foo", decl = a.h:4 82# CHECK: LineEntry: [0x0000000140001010-0x0000000140001018): /tmp/a.h:7 83# CHECK-NEXT: Variable: id = {{.*}}, name = "foo_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001039) 84# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001000-0x000000014000102d) 85# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 86# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 87 88# CEHCK-LABEL: (lldb) image lookup -a 0x14000101c -v 89# CHECK: Summary: {{.*}}`main + 28 [inlined] Class1::bar at b.h:5 90# CHECK-NEXT: {{.*}}`main + 28 [inlined] Namespace1::foo + 24 at a.h:9 91# CHECK-NEXT: {{.*}}`main + 4 at a.cpp:3 92# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 93# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 94# CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001039)[0x140001044-0x140001046), name = "Namespace1::foo", decl = a.h:4 95# CHECK-NEXT: id = {{.*}}, range = [0x14000101c-0x140001039), name = "Class1::bar", decl = b.h:4 96# CHECK: LineEntry: [0x000000014000101c-0x0000000140001022): /tmp/b.h:5 97# CHECK-NEXT: Variable: id = {{.*}}, name = "x", type = "int", valid ranges = [0x000000014000101c-0x000000014000101e) 98# CHECK-NEXT: Variable: id = {{.*}}, name = "bar_local", type = "int", valid ranges = [0x000000014000101c-0x0000000140001039) 99# CHECK-NEXT: Variable: id = {{.*}}, name = "foo_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001039) 100# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001000-0x000000014000102d) 101# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 102# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 103 104# CEHCK-LABEL: (lldb) image lookup -a 0x14000102a -v 105# CHECK: Summary: {{.*}}`main + 42 [inlined] Namespace2::Class2::func at c.h:5 106# CHECK-NEXT: {{.*}}`main + 42 [inlined] Class1::bar + 14 at b.h:7 107# CHECK-NEXT: {{.*}}`main + 28 [inlined] Namespace1::foo + 24 at a.h:9 108# CHECK-NEXT: {{.*}}`main + 4 at a.cpp:3 109# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 110# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 111# CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001039)[0x140001044-0x140001046), name = "Namespace1::foo", decl = a.h:4 112# CHECK-NEXT: id = {{.*}}, range = [0x14000101c-0x140001039), name = "Class1::bar", decl = b.h:4 113# CHECK-NEXT: id = {{.*}}, range = [0x14000102a-0x140001039), name = "Namespace2::Class2::func", decl = c.h:4 114# CHECK: LineEntry: [0x000000014000102a-0x0000000140001031): /tmp/c.h:5 115# CHECK-NEXT: Variable: id = {{.*}}, name = "x", type = "int", valid ranges = [0x000000014000102a-0x0000000140001039) 116# CHECK-NEXT: Variable: id = {{.*}}, name = "func_local", type = "int", valid ranges = [0x000000014000102a-0x0000000140001039) 117# CHECK-NEXT: Variable: id = {{.*}}, name = "bar_local", type = "int", valid ranges = [0x000000014000101c-0x0000000140001039) 118# CHECK-NEXT: Variable: id = {{.*}}, name = "foo_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001039) 119# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001000-0x000000014000102d) 120# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 121# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 122 123# CEHCK-LABEL: (lldb) image lookup -a 0x140001039 -v 124# CHECK: Summary: {{.*}}`main + 57 at a.cpp:3 125# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 126# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 127# CHECK: LineEntry: [0x0000000140001039-0x000000014000103d): /tmp/a.cpp:3 128# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 129# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 130 131# CEHCK-LABEL: (lldb) image lookup -a 0x140001044 -v 132# CHECK: Summary: {{.*}}`main + 68 [inlined] Namespace1::foo at a.h:8 133# CHECK-NEXT: {{.*}}`main + 68 at a.cpp:3 134# CHECK: Function: id = {{.*}}, name = "main", range = [0x0000000140001000-0x0000000140001046) 135# CHECK: Blocks: id = {{.*}}, range = [0x140001000-0x140001046) 136# CHECK-NEXT: id = {{.*}}, ranges = [0x140001004-0x140001039)[0x140001044-0x140001046), name = "Namespace1::foo", decl = a.h:4 137# CHECK: LineEntry: [0x0000000140001044-0x0000000140001046): /tmp/a.h:8 138# CHECK-NEXT: Variable: id = {{.*}}, name = "foo_local", type = "int", valid ranges = [0x0000000140001044-0x0000000140001046) 139# CHECK-NEXT: Variable: id = {{.*}}, name = "argc", type = "int", valid ranges = [0x0000000140001044-0x0000000140001045) 140# CHECK-NEXT: Variable: id = {{.*}}, name = "argv", type = "char **", valid ranges = [0x0000000140001000-0x0000000140001045) 141# CHECK-NEXT: Variable: id = {{.*}}, name = "main_local", type = "int", valid ranges = [0x0000000140001004-0x0000000140001046) 142 143# CHECK-LABEL: (lldb) target modules dump ast 144# CHECK-NEXT: Dumping clang ast for 1 modules. 145# CHECK-NEXT: TranslationUnitDecl {{.*}} <undeserialized declarations> 146# CHECK-NEXT: |-FunctionDecl {{.*}} main 'int (int, char **)' 147# CHECK-NEXT: | |-ParmVarDecl {{.*}} argc 'int' 148# CHECK-NEXT: | `-ParmVarDecl {{.*}} argv 'char **' 149# CHECK-NEXT: |-NamespaceDecl {{.*}} Namespace1 150# CHECK-NEXT: | `-FunctionDecl {{.*}} foo 'int (int)' inline 151# CHECK-NEXT: | `-ParmVarDecl {{.*}} x 'int' 152# CHECK-NEXT: |-CXXRecordDecl {{.*}} <undeserialized declarations> class Class1 153# CHECK-NEXT: | |-AccessSpecDecl {{.*}} public 154# CHECK-NEXT: | `-CXXMethodDecl {{.*}} bar 'int (int)' static 155# CHECK-NEXT: | `-ParmVarDecl {{.*}} 'int' 156# CHECK-NEXT: `-NamespaceDecl {{.*}} Namespace2 157# CHECK-NEXT: `-CXXRecordDecl {{.*}} <undeserialized declarations> class Class2 158# CHECK-NEXT: |-AccessSpecDecl {{.*}} public 159# CHECK-NEXT: `-CXXMethodDecl {{.*}} func 'int (int)' static 160# CHECK-NEXT: `-ParmVarDecl {{.*}} 'int' 161