NEWS: Mention the MinGW include/valgrind.h fix
[valgrind.git] / tests / malloc.h
blob146790e3c7e48db08a4523559bd9434108c3af73
1 // Replacement for malloc.h which factors out platform differences.
3 #include <stdlib.h>
4 #if defined(VGO_darwin)
5 # include <malloc/malloc.h>
6 #else
7 # include <malloc.h>
8 #endif
10 #include <assert.h>
12 // Allocates a 16-aligned block. Asserts if the allocation fails.
13 __attribute__((unused))
14 static void* memalign16(size_t szB)
16 void* x;
17 #if defined(VGO_darwin)
18 // Darwin lacks memalign, but its malloc is always 16-aligned anyway.
19 posix_memalign((void **)&x, 16, szB);
20 #else
21 x = memalign(16, szB);
22 #endif
23 assert(x);
24 assert(0 == ((16-1) & (unsigned long)x));
25 return x;
28 // Allocates a 32-aligned block. Asserts if the allocation fails.
29 __attribute__((unused))
30 static void* memalign32(size_t szB)
32 void* x;
33 #if defined(VGO_darwin)
34 // Darwin lacks memalign
35 posix_memalign((void **)&x, 32, szB);
36 #else
37 x = memalign(32, szB);
38 #endif
39 assert(x);
40 assert(0 == ((32-1) & (unsigned long)x));
41 return x;
44 // Allocates a 64-aligned block. Asserts if the allocation fails.
45 __attribute__((unused))
46 static void* memalign64(size_t szB)
48 void* x;
49 #if defined(VGO_darwin)
50 // Darwin lacks memalign
51 posix_memalign((void **)&x, 64, szB);
52 #else
53 x = memalign(64, szB);
54 #endif
55 assert(x);
56 assert(0 == ((64-1) & (unsigned long)x));
57 return x;