blob: b95a8feba04bf772684d4e719175c866e70530d7 [file] [log] [blame]
sewardjc8bd1df2011-06-26 12:41:33 +00001#include <stdio.h>
2#include <stdlib.h>
3#include "../memcheck.h"
4#include "leak.h"
5
6char *b10;
7char *b21;
8char *b32_33[2];
9static void breakme() {};
10void f(void)
11{
12 int i;
13
14 b10 = malloc (10);
15
16 fprintf(stderr, "expecting details 10 bytes reachable\n"); fflush(stderr); breakme();
17 VALGRIND_DO_LEAK_CHECK;
18
19 fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
20 VALGRIND_DO_ADDED_LEAK_CHECK;
21
22 b10--; // lose b10
23 b21 = malloc (21);
24 fprintf(stderr, "expecting details +10 bytes lost, +21 bytes reachable\n"); fflush(stderr); breakme();
25 VALGRIND_DO_ADDED_LEAK_CHECK;
26
27 for (i = 0; i < 2; i ++)
28 b32_33[i] = malloc (32+i);
29 fprintf(stderr, "expecting details +65 bytes reachable\n"); fflush(stderr); breakme();
30 VALGRIND_DO_ADDED_LEAK_CHECK;
31
32 fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
33 VALGRIND_DO_ADDED_LEAK_CHECK;
34
35 b10++;
36 fprintf(stderr, "expecting details +10 bytes reachable\n"); fflush(stderr); breakme();
37 VALGRIND_DO_ADDED_LEAK_CHECK;
38
39 b10--;
40 fprintf(stderr, "expecting details -10 bytes reachable, +10 bytes lost\n"); fflush(stderr); breakme();
41 VALGRIND_DO_CHANGED_LEAK_CHECK;
42
43 b10++;
44 fprintf(stderr, "expecting details -10 bytes lost, +10 bytes reachable\n"); fflush(stderr); breakme();
45 VALGRIND_DO_CHANGED_LEAK_CHECK;
46
47 b32_33[0]--;
48 fprintf(stderr, "expecting details 32 (+32) bytes lost, 33 (-32) bytes reachable\n"); fflush(stderr); breakme();
49 VALGRIND_DO_CHANGED_LEAK_CHECK;
50
51 fprintf(stderr, "finished\n");
52}
53
54int main(void)
55{
56 DECLARE_LEAK_COUNTERS;
57
58 GET_INITIAL_LEAK_COUNTS;
59
60 f(); // see leak-cases.c
61
62
63 GET_FINAL_LEAK_COUNTS;
64
65 PRINT_LEAK_COUNTS(stderr);
66
67 return 0;
68}