mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-08 00:16:11 +00:00
79 lines
1.4 KiB
C
79 lines
1.4 KiB
C
/* Taken from memcheck/tests/inlinfo.c almost verbatim;
|
|
* only main() renamed to main_nested().
|
|
*/
|
|
|
|
#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_nested(void) {
|
|
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;
|
|
}
|
|
|