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