1 #include <stdio.h>
2 #include <stdlib.h>
3 
4 #define INLINE    inline __attribute__((always_inline))
5 
alloc(int n)6 int alloc (int n) {
7    (void) malloc (n);
8    return n;
9 }
10 
fun_d(int argd)11 INLINE int fun_d(int argd) {
12    static int locd = 0;
13    if (argd > 0)
14       locd += argd;
15    return alloc (locd);
16 }
17 
fun_c(int argc)18 INLINE int fun_c(int argc) {
19    static int locc = 0;
20    locc += argc;
21    return fun_d(locc);
22 }
23 
fun_b(int argb)24 INLINE int fun_b(int argb) {
25    static int locb = 0;
26    locb += argb;
27    return fun_c(locb);
28 }
29 
fun_a(int arga)30 INLINE int fun_a(int arga) {
31    static int loca = 0;
32    loca += arga;
33    return fun_b(loca);
34 }
35 
36 __attribute__((noinline))
fun_noninline_m(int argm)37 static int fun_noninline_m(int argm)
38 {
39    return fun_d(argm);
40 }
41 
42 __attribute__((noinline))
fun_noninline_o(int argo)43 static int fun_noninline_o(int argo)
44 {
45    static int loco = 0;
46    if (argo > 0)
47       loco += argo;
48    return alloc (loco);
49 }
50 
fun_f(int argf)51 INLINE int fun_f(int argf) {
52    static int locf = 0;
53    locf += argf;
54    return fun_noninline_o(locf);
55 }
56 
fun_e(int arge)57 INLINE int fun_e(int arge) {
58    static int loce = 0;
59    loce += arge;
60    return fun_f(loce);
61 }
62 
63 __attribute__((noinline))
fun_noninline_n(int argn)64 static int fun_noninline_n(int argn)
65 {
66    return fun_e(argn);
67 }
68 
69 
main()70 int main() {
71    int result = 100000;
72    result = fun_a(result);
73    result += fun_b(result);
74    result += fun_noninline_m(result);
75    result += fun_d(result);
76    result += fun_noninline_n(result);
77    return 0;
78 }
79 
80