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