File: inlinfo_nested.c

package info (click to toggle)
valgrind 1%3A3.24.0-3
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 176,332 kB
  • sloc: ansic: 795,029; exp: 26,134; xml: 23,472; asm: 14,393; cpp: 9,397; makefile: 7,464; sh: 6,122; perl: 5,446; python: 1,498; javascript: 981; awk: 166; csh: 1
file content (78 lines) | stat: -rw-r--r-- 1,475 bytes parent folder | download | duplicates (11)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/* Taken from memcheck/tests/inlinfo.c almost verbatim;
 * only main() renamed to main_nested().
 */

#include "../../memcheck.h"
#define INLINE static 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;
}