1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdlib.h>
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// All sizes are divisible by 16 -- no slop.
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint* ignore1(void)
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Allocating/freeing in an ignored function: ignored.
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int* ignored_x1 = malloc(400);
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int* ignored_x2 = malloc(400);
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   free(ignored_x2);
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return ignored_x1;
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownvoid ignore2(int* x, int* ignored_x)
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Growing/shrinking a non-ignored block in an ignored function: ignored.
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = realloc(x, 800);
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = realloc(x, 400);
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Growing/shrinking an ignored block in an ignored function: ignored.
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignored_x = realloc(ignored_x, 800);
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignored_x = realloc(ignored_x, 400);
23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownint main(void)
26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{
27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int* x;
28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   int* ignored_x;
29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Not ignored.
31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = malloc(400);
32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
33ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Get an ignored block.
34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignored_x = ignore1();
35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
36ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Growing/shrinking a non-ignored block in a non-ignored function:
37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // not ignored.
38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = realloc(x, 800);
39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = realloc(x, 400);
40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   // Growing/shrinking an ignored block in a non-ignored function: ignored.
42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignored_x = realloc(ignored_x, 800);
43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignored_x = realloc(ignored_x, 400);
44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   ignore2(x, ignored_x);
46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   x = realloc(ignored_x, 0);    // equivalent to 'free(ignored_x)'.
48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   return 0;
50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
52