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