1 #include <stdio.h>
2 
3 /*
4  * Normal functions.
5  * i.e. all arguments are used.
6  */
arg1(int a1)7 int arg1(int a1)
8 {
9     printf("%d\n", a1);
10     return a1;
11 }
12 
arg2(int a1,int a2)13 int arg2(int a1, int a2)
14 {
15     printf("%d\n", a1 + a2);
16     return a2;
17 }
18 
arg3(int a1,int a2,int a3)19 int arg3(int a1, int a2, int a3)
20 {
21     printf("%d\n", a1 + a2 + a3);
22     return a3;
23 }
24 
arg4(int a1,int a2,int a3,int a4)25 int arg4(int a1, int a2, int a3, int a4)
26 {
27     printf("%d\n", a1 + a2 + a3 + a4);
28     return a4;
29 }
30 
arg5(int a1,int a2,int a3,int a4,int a5)31 int arg5(int a1, int a2, int a3, int a4, int a5)
32 {
33     printf("%d\n", a1 + a2 + a3 + a4 + a5);
34     return a5;
35 }
36 
arg6(int a1,int a2,int a3,int a4,int a5,int a6)37 int arg6(int a1, int a2, int a3, int a4, int a5, int a6)
38 {
39     printf("%d\n", a1 + a2 + a3 + a4 + a5 + a6);
40     return a6;
41 }
42 
arg7(int a1,int a2,int a3,int a4,int a5,int a6,int a7)43 int arg7(int a1, int a2, int a3, int a4, int a5, int a6, int a7)
44 {
45     printf("%d\n", a1 + a2 + a3 + a4 + a5 + a6 + a7);
46     return a7;
47 }
48 
arg8(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8)49 int arg8(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8)
50 {
51     printf("%d\n", a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8);
52     return a8;
53 }
54 
arg9(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9)55 int arg9(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
56 {
57     printf("%d\n", a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9);
58     return a9;
59 }
60 
61 /*
62  * Not all parameters are used.
63  */
params_unused(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9)64 int params_unused(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
65 {
66     printf("%d\n", a1 + a2 + a9);
67     return a1;
68 }
69 
70 /*
71  * Directly passes arguments to the callee
72  * In some cases this function might be optimized and no reference of those
73  * arguments can be found in this function.
74  */
argument_pass_through(int a1,int a2,int a3,int a4,int a5,int a6,int a7,int a8,int a9)75 int argument_pass_through(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)
76 {
77     arg3(a1, a2, a3);
78     arg9(a1, a2, a3, a4, a5, a6, a7, a8, a9);
79 
80     return a1;
81 }
82 
main(int argc,char ** argv)83 int main(int argc, char** argv)
84 {
85     int a;
86     scanf("%d", &a);
87     arg1(a);
88     arg2(a, a);
89     arg3(a, a, a);
90     arg4(a, a, a, a);
91     arg5(a, a, a, a, a);
92     arg6(a, a, a, a, a, a);
93     arg7(a, a, a, a, a, a, a);
94     arg8(a, a, a, a, a, a, a, a);
95     arg9(a, a, a, a, a, a, a, a, a);
96     params_unused(a, a, a, a, a, a, a, a, a);
97     argument_pass_through(a, a, a, a, a, a, a, a, a);
98 }
99