#include <stdio.h>
#include "../memcheck.h"
#define INLINE    inline __attribute__((always_inline))

INLINE int fun_d(int argd) {
   static int locd = 0;
   if (argd > 0)
      locd += argd;
   return locd;
}

INLINE int fun_c(int argc) {
   static int locc = 0;
   locc += argc;
   return fun_d(locc);
}

INLINE int fun_b(int argb) {
   static int locb = 0;
   locb += argb;
   return fun_c(locb);
}

INLINE int fun_a(int arga) {
   static int loca = 0;
   loca += arga;
   return fun_b(loca);
}

__attribute__((noinline))
static int fun_noninline_m(int argm)
{
   return fun_d(argm);
}

__attribute__((noinline))
static int fun_noninline_o(int argo)
{
   static int loco = 0;
   if (argo > 0)
      loco += argo;
   return loco;
}

INLINE int fun_f(int argf) {
   static int locf = 0;
   locf += argf;
   return fun_noninline_o(locf);
}

INLINE int fun_e(int arge) {
   static int loce = 0;
   loce += arge;
   return fun_f(loce);
}

__attribute__((noinline))
static int fun_noninline_n(int argn)
{
   return fun_e(argn);
}


int main() {
   int result;
   result = fun_a(result);
   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
   result += fun_noninline_m(result);
   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
   result += fun_d(result);
   VALGRIND_MAKE_MEM_UNDEFINED(&result, sizeof(result));
   result += fun_noninline_n(result);
   return 0;
}

