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