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