1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 // The goal with this test is:
5 //  1. Have main() followed by foo()
6 //  2. Have the no-return call to abort() in main be the last instruction
7 //  3. Have the next instruction be the start of foo()
8 //  4. The debug info for argv uses a location list.
9 //     clang at -O1 on x86_64 or arm64 has debuginfo like
10 //          DW_AT_location	(0x00000049:
11 //              [0x0000000100003f15, 0x0000000100003f25): DW_OP_reg4 RSI
12 //              [0x0000000100003f25, 0x0000000100003f5b): DW_OP_reg15 R15)
13 
14 void foo(int);
main(int argc,char ** argv)15 int main(int argc, char **argv) {
16   char *file = argv[0];
17   char f0 = file[0];
18   printf("%c\n", f0);
19   foo(f0);
20   printf("%s %d\n", argv[0], argc);
21   abort(); /// argv is still be accessible here
22 }
foo(int in)23 void foo(int in) { printf("%d\n", in); }
24