1 #include <stdio.h> 2 #include <stdlib.h> 3 4 #define INLINE inline __attribute__((always_inline)) 5 alloc(int n)6int alloc (int n) { 7 (void) malloc (n); 8 return n; 9 } 10 fun_d(int argd)11INLINE 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)18INLINE int fun_c(int argc) { 19 static int locc = 0; 20 locc += argc; 21 return fun_d(locc); 22 } 23 fun_b(int argb)24INLINE int fun_b(int argb) { 25 static int locb = 0; 26 locb += argb; 27 return fun_c(locb); 28 } 29 fun_a(int arga)30INLINE 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)37static int fun_noninline_m(int argm) 38 { 39 return fun_d(argm); 40 } 41 42 __attribute__((noinline)) fun_noninline_o(int argo)43static 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)51INLINE 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)57INLINE 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)64static int fun_noninline_n(int argn) 65 { 66 return fun_e(argn); 67 } 68 69 main()70int 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