187aa9c9eSJonas Devlieghere // clang-format off
287aa9c9eSJonas Devlieghere
387aa9c9eSJonas Devlieghere // REQUIRES: system-windows
487aa9c9eSJonas Devlieghere // RUN: %build -o %t.exe -- %s
587aa9c9eSJonas Devlieghere // RUN: env LLDB_USE_NATIVE_PDB_READER=1 %lldb -f %t.exe -s \
687aa9c9eSJonas Devlieghere // RUN: %p/Inputs/local-variables.lldbinit 2>&1 | FileCheck %s
787aa9c9eSJonas Devlieghere
Function(int Param1,char Param2)887aa9c9eSJonas Devlieghere int Function(int Param1, char Param2) {
987aa9c9eSJonas Devlieghere unsigned Local1 = Param1 + 1;
1087aa9c9eSJonas Devlieghere char Local2 = Param2 + 1;
1187aa9c9eSJonas Devlieghere ++Local1;
1287aa9c9eSJonas Devlieghere ++Local2;
1387aa9c9eSJonas Devlieghere return Local1;
1487aa9c9eSJonas Devlieghere }
1587aa9c9eSJonas Devlieghere
main(int argc,char ** argv)1687aa9c9eSJonas Devlieghere int main(int argc, char **argv) {
1787aa9c9eSJonas Devlieghere int SomeLocal = argc * 2;
1887aa9c9eSJonas Devlieghere return Function(SomeLocal, 'a');
1987aa9c9eSJonas Devlieghere }
2087aa9c9eSJonas Devlieghere
2187aa9c9eSJonas Devlieghere // CHECK: (lldb) target create "{{.*}}local-variables.cpp.tmp.exe"
2287aa9c9eSJonas Devlieghere // CHECK-NEXT: Current executable set to '{{.*}}local-variables.cpp.tmp.exe'
2387aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) command source -s 0 '{{.*}}local-variables.lldbinit'
2487aa9c9eSJonas Devlieghere // CHECK-NEXT: Executing commands in '{{.*}}local-variables.lldbinit'.
25*68cc1eebSMuhammad Omair Javaid // CHECK-NEXT: (lldb) break set -f local-variables.cpp -l 17
2687aa9c9eSJonas Devlieghere // CHECK-NEXT: Breakpoint 1: where = local-variables.cpp.tmp.exe`main + {{.*}} at local-variables.cpp:{{.*}}, address = {{.*}}
2787aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) run a b c d e f g
2887aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
2987aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = breakpoint 1.1
3087aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}}
3187aa9c9eSJonas Devlieghere // CHECK-NEXT: 14 }
3287aa9c9eSJonas Devlieghere // CHECK-NEXT: 15
3387aa9c9eSJonas Devlieghere // CHECK-NEXT: 16 int main(int argc, char **argv) {
3487aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 17 int SomeLocal = argc * 2;
3587aa9c9eSJonas Devlieghere // CHECK-NEXT: 18 return Function(SomeLocal, 'a');
3687aa9c9eSJonas Devlieghere // CHECK-NEXT: 19 }
3787aa9c9eSJonas Devlieghere // CHECK-NEXT: 20
3887aa9c9eSJonas Devlieghere
3987aa9c9eSJonas Devlieghere // CHECK: Process {{.*}} launched: '{{.*}}local-variables.cpp.tmp.exe'
4087aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p argc
4187aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $0 = 8
4287aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
4387aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
4487aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
4587aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`main(argc=8, argv={{.*}}) at local-variables.cpp:{{.*}}
4687aa9c9eSJonas Devlieghere // CHECK-NEXT: 15
4787aa9c9eSJonas Devlieghere // CHECK-NEXT: 16 int main(int argc, char **argv) {
4887aa9c9eSJonas Devlieghere // CHECK-NEXT: 17 int SomeLocal = argc * 2;
4987aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 18 return Function(SomeLocal, 'a');
5087aa9c9eSJonas Devlieghere // CHECK-NEXT: 19 }
5187aa9c9eSJonas Devlieghere // CHECK-NEXT: 20
5287aa9c9eSJonas Devlieghere
5387aa9c9eSJonas Devlieghere // CHECK: (lldb) p SomeLocal
5487aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $1 = 16
5587aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
5687aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
5787aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
5887aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
5987aa9c9eSJonas Devlieghere // CHECK-NEXT: 6
6087aa9c9eSJonas Devlieghere // CHECK-NEXT: 7
6187aa9c9eSJonas Devlieghere // CHECK-NEXT: 8 int Function(int Param1, char Param2) {
6287aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 9 unsigned Local1 = Param1 + 1;
6387aa9c9eSJonas Devlieghere // CHECK-NEXT: 10 char Local2 = Param2 + 1;
6487aa9c9eSJonas Devlieghere // CHECK-NEXT: 11 ++Local1;
6587aa9c9eSJonas Devlieghere // CHECK-NEXT: 12 ++Local2;
6687aa9c9eSJonas Devlieghere
6787aa9c9eSJonas Devlieghere // CHECK: (lldb) p Param1
6887aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $2 = 16
6987aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Param2
7087aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $3 = 'a'
7187aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
7287aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
7387aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
7487aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
7587aa9c9eSJonas Devlieghere // CHECK-NEXT: 7
7687aa9c9eSJonas Devlieghere // CHECK-NEXT: 8 int Function(int Param1, char Param2) {
7787aa9c9eSJonas Devlieghere // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1;
7887aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 10 char Local2 = Param2 + 1;
7987aa9c9eSJonas Devlieghere // CHECK-NEXT: 11 ++Local1;
8087aa9c9eSJonas Devlieghere // CHECK-NEXT: 12 ++Local2;
8187aa9c9eSJonas Devlieghere // CHECK-NEXT: 13 return Local1;
8287aa9c9eSJonas Devlieghere
8387aa9c9eSJonas Devlieghere // CHECK: (lldb) p Param1
8487aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $4 = 16
8587aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Param2
8687aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $5 = 'a'
8787aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local1
8887aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int) $6 = 17
8987aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
9087aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
9187aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
9287aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
9387aa9c9eSJonas Devlieghere // CHECK-NEXT: 8 int Function(int Param1, char Param2) {
9487aa9c9eSJonas Devlieghere // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1;
9587aa9c9eSJonas Devlieghere // CHECK-NEXT: 10 char Local2 = Param2 + 1;
9687aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 11 ++Local1;
9787aa9c9eSJonas Devlieghere // CHECK-NEXT: 12 ++Local2;
9887aa9c9eSJonas Devlieghere // CHECK-NEXT: 13 return Local1;
9987aa9c9eSJonas Devlieghere // CHECK-NEXT: 14 }
10087aa9c9eSJonas Devlieghere
10187aa9c9eSJonas Devlieghere // CHECK: (lldb) p Param1
10287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $7 = 16
10387aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Param2
10487aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $8 = 'a'
10587aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local1
10687aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int) $9 = 17
10787aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local2
10887aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $10 = 'b'
10987aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
11087aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
11187aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
11287aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
11387aa9c9eSJonas Devlieghere // CHECK-NEXT: 9 unsigned Local1 = Param1 + 1;
11487aa9c9eSJonas Devlieghere // CHECK-NEXT: 10 char Local2 = Param2 + 1;
11587aa9c9eSJonas Devlieghere // CHECK-NEXT: 11 ++Local1;
11687aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 12 ++Local2;
11787aa9c9eSJonas Devlieghere // CHECK-NEXT: 13 return Local1;
11887aa9c9eSJonas Devlieghere // CHECK-NEXT: 14 }
11987aa9c9eSJonas Devlieghere // CHECK-NEXT: 15
12087aa9c9eSJonas Devlieghere
12187aa9c9eSJonas Devlieghere // CHECK: (lldb) p Param1
12287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $11 = 16
12387aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Param2
12487aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $12 = 'a'
12587aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local1
12687aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int) $13 = 18
12787aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local2
12887aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $14 = 'b'
12987aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) step
13087aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} stopped
13187aa9c9eSJonas Devlieghere // CHECK-NEXT: * thread #1, stop reason = step in
13287aa9c9eSJonas Devlieghere // CHECK-NEXT: frame #0: {{.*}} local-variables.cpp.tmp.exe`Function(Param1=16, Param2='a') at local-variables.cpp:{{.*}}
13387aa9c9eSJonas Devlieghere // CHECK-NEXT: 10 char Local2 = Param2 + 1;
13487aa9c9eSJonas Devlieghere // CHECK-NEXT: 11 ++Local1;
13587aa9c9eSJonas Devlieghere // CHECK-NEXT: 12 ++Local2;
13687aa9c9eSJonas Devlieghere // CHECK-NEXT: -> 13 return Local1;
13787aa9c9eSJonas Devlieghere // CHECK-NEXT: 14 }
13887aa9c9eSJonas Devlieghere // CHECK-NEXT: 15
13987aa9c9eSJonas Devlieghere // CHECK-NEXT: 16 int main(int argc, char **argv) {
14087aa9c9eSJonas Devlieghere
14187aa9c9eSJonas Devlieghere // CHECK: (lldb) p Param1
14287aa9c9eSJonas Devlieghere // CHECK-NEXT: (int) $15 = 16
14387aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Param2
14487aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $16 = 'a'
14587aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local1
14687aa9c9eSJonas Devlieghere // CHECK-NEXT: (unsigned int) $17 = 18
14787aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) p Local2
14887aa9c9eSJonas Devlieghere // CHECK-NEXT: (char) $18 = 'c'
14987aa9c9eSJonas Devlieghere // CHECK-NEXT: (lldb) continue
15087aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} resuming
15187aa9c9eSJonas Devlieghere // CHECK-NEXT: Process {{.*}} exited with status = 18 (0x00000012)
15287aa9c9eSJonas Devlieghere
15387aa9c9eSJonas Devlieghere // CHECK: (lldb) target modules dump ast
15487aa9c9eSJonas Devlieghere // CHECK-NEXT: Dumping clang ast for {{.*}} modules.
15587aa9c9eSJonas Devlieghere // CHECK-NEXT: TranslationUnitDecl
15687aa9c9eSJonas Devlieghere // CHECK-NEXT: |-FunctionDecl {{.*}} main 'int (int, char **)'
15787aa9c9eSJonas Devlieghere // CHECK-NEXT: | |-ParmVarDecl {{.*}} argc 'int'
15887aa9c9eSJonas Devlieghere // CHECK-NEXT: | `-ParmVarDecl {{.*}} argv 'char **'
159b6d35352SZequan Wu // CHECK-NEXT: |-FunctionDecl {{.*}} __scrt_common_main_seh 'int ()' static
160c45975cbSZequan Wu // CHECK-NEXT: |-FunctionDecl {{.*}} invoke_main 'int ()' inline
161*68cc1eebSMuhammad Omair Javaid // CHECK: `-FunctionDecl {{.*}} Function 'int (int, char)'
16287aa9c9eSJonas Devlieghere // CHECK-NEXT: |-ParmVarDecl {{.*}} Param1 'int'
16387aa9c9eSJonas Devlieghere // CHECK-NEXT: `-ParmVarDecl {{.*}} Param2 'char'
164