1#include <stdio.h>
2#include <stdlib.h>
3#include <assert.h>
4#include "../memcheck.h"
5#include "leak.h"
6
7int main(void)
8{
9   int  x;
10   int  y = 0;
11   int* reachable __attribute__((unused));
12   int* dubious;
13   int* leaked __attribute__((unused));
14   DECLARE_LEAK_COUNTERS;
15
16   /* we require these longs to have same size as a machine word */
17   assert(sizeof(long) == sizeof(void*));
18
19   /* Error counting */
20   fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
21
22   if (x == 0) {
23      y++;
24   } else {
25      y--;
26   }
27
28   fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
29
30   // Get a baseline, after start-up and also after printf (because Darwin
31   // printf allocates memory the first time it's called!)
32   GET_INITIAL_LEAK_COUNTS;
33
34   fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
35
36   /* Leak checking */
37   GET_FINAL_LEAK_COUNTS;
38   PRINT_LEAK_COUNTS(stderr);
39   fprintf(stderr, "\n");
40
41   fprintf(stderr, "errors: %d\n\n", VALGRIND_COUNT_ERRORS);
42
43   leaked = malloc(77);
44   leaked = 0;
45
46   dubious = malloc(88);
47   dubious += 10;
48
49   reachable = malloc(99);
50
51   GET_FINAL_LEAK_COUNTS;
52   PRINT_LEAK_COUNTS(stderr);
53   fprintf(stderr, "\n");
54
55   fprintf(stderr, "errors: %d\n", VALGRIND_COUNT_ERRORS);
56
57   return 0;
58}
59