Fix 64-bit uncleanness in VG_(get_bbs_translated)/VG_(get_bbs_discarded_or_dumped) ..
[valgrind.git] / memcheck / tests / leak-delta.c
bloba20f7d4c5cd979dabad86b240828800df98c79ac
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "../memcheck.h"
4 #include "leak.h"
6 char *b10;
7 char *b21;
8 char *b32_33[2];
9 char *b42_43[2];
10 static void breakme() {};
11 void f(void)
13 int i;
15 b10 = malloc (10);
17 fprintf(stderr, "expecting details 10 bytes reachable\n"); fflush(stderr); breakme();
18 VALGRIND_DO_LEAK_CHECK;
20 fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
21 VALGRIND_DO_ADDED_LEAK_CHECK;
23 b10--; // lose b10
24 b21 = malloc (21);
25 fprintf(stderr, "expecting details +10 bytes lost, +21 bytes reachable\n"); fflush(stderr); breakme();
26 VALGRIND_DO_ADDED_LEAK_CHECK;
28 for (i = 0; i < 2; i ++)
29 b32_33[i] = malloc (32+i);
30 fprintf(stderr, "expecting details +65 bytes reachable\n"); fflush(stderr); breakme();
31 VALGRIND_DO_ADDED_LEAK_CHECK;
33 fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
34 VALGRIND_DO_ADDED_LEAK_CHECK;
36 b10++;
37 fprintf(stderr, "expecting details +10 bytes reachable\n"); fflush(stderr); breakme();
38 VALGRIND_DO_ADDED_LEAK_CHECK;
40 b10--;
41 fprintf(stderr, "expecting details -10 bytes reachable, +10 bytes lost\n"); fflush(stderr); breakme();
42 VALGRIND_DO_CHANGED_LEAK_CHECK;
44 b10++;
45 fprintf(stderr, "expecting details -10 bytes lost, +10 bytes reachable\n"); fflush(stderr); breakme();
46 VALGRIND_DO_CHANGED_LEAK_CHECK;
48 b32_33[0]--;
49 fprintf(stderr, "expecting details 32 (+32) bytes lost, 33 (-32) bytes reachable\n"); fflush(stderr); breakme();
50 VALGRIND_DO_CHANGED_LEAK_CHECK;
52 for (i = 0; i < 2; i ++)
53 b42_43[i] = malloc (42+i);
55 b42_43[0]--;
56 fprintf(stderr, "expecting details 42 (+42) bytes lost, 43 (+43) bytes reachable\n"); fflush(stderr); breakme();
57 VALGRIND_DO_NEW_LEAK_CHECK;
59 b42_43[1]--;
60 fprintf(stderr, "expecting to have NO details\n"); fflush(stderr); breakme();
61 VALGRIND_DO_NEW_LEAK_CHECK;
63 fprintf(stderr, "finished\n");
66 int main(void)
68 DECLARE_LEAK_COUNTERS;
70 GET_INITIAL_LEAK_COUNTS;
72 f(); // see leak-cases.c
75 GET_FINAL_LEAK_COUNTS;
77 PRINT_LEAK_COUNTS(stderr);
79 return 0;