5 /* Check that function wrapping works for a mutually recursive
8 static int fact1 ( int n
);
9 static int fact2 ( int n
);
11 /* This is needed to stop gcc4 turning 'fact' into a loop */
12 __attribute__((noinline
))
13 int mul ( int x
, int y
) { return x
* y
; }
17 if (n
== 0) return 1; else return mul(n
, fact2(n
-1));
21 if (n
== 0) return 1; else return mul(n
, fact1(n
-1));
25 int I_WRAP_SONAME_FNNAME_ZU(NONE
,fact1
) ( int n
)
29 VALGRIND_GET_ORIG_FN(fn
);
30 printf("in wrapper1-pre: fact(%d)\n", n
);
32 printf("in wrapper1-post: fact(%d) = %d\n", n
, r
);
36 int I_WRAP_SONAME_FNNAME_ZU(NONE
,fact2
) ( int n
)
40 VALGRIND_GET_ORIG_FN(fn
);
41 printf("in wrapper2-pre: fact(%d)\n", n
);
43 printf("in wrapper2-post: fact(%d) = %d\n", n
, r
);
52 printf("computing fact1(5)\n");
54 printf("fact1(5) = %d\n", r
);