diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/tsan/Darwin/malloc_size.mm | 54 |
1 files changed, 43 insertions, 11 deletions
diff --git a/test/tsan/Darwin/malloc_size.mm b/test/tsan/Darwin/malloc_size.mm index da1830529..3d3629b73 100644 --- a/test/tsan/Darwin/malloc_size.mm +++ b/test/tsan/Darwin/malloc_size.mm @@ -6,18 +6,50 @@ #import <Foundation/Foundation.h> #include <malloc/malloc.h> -int main() { - void *p = malloc(0); - - size_t s = malloc_size(p); - printf("size = 0x%zx\n", s); +int some_global; +void describe_zone(void *p) { malloc_zone_t *z = malloc_zone_from_ptr(p); - if (z) - printf("z = %p\n", z); - else - printf("no zone\n"); + if (z) { + fprintf(stderr, "zone = %p\n", z); + } else { + fprintf(stderr, "zone = no zone\n"); + } } -// CHECK: z = 0x{{[0-9a-f]+}} -// CHECK-NOT: no zone +int main() { + void *p; + size_t s; + + p = malloc(0x40); + s = malloc_size(p); + fprintf(stderr, "size = 0x%zx\n", s); + // CHECK: size = 0x40 + describe_zone(p); + // CHECK: zone = 0x{{[0-9a-f]+}} + + p = malloc(0); + s = malloc_size(p); + fprintf(stderr, "size = 0x%zx\n", s); + // CHECK: size = 0x1 + describe_zone(p); + // CHECK: zone = 0x{{[0-9a-f]+}} + + p = &some_global; + s = malloc_size(p); + fprintf(stderr, "size = 0x%zx\n", s); + // CHECK: size = 0x0 + describe_zone(p); + // CHECK: zone = no zone + + p = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0); + if (!p) { + fprintf(stderr, "mmap failed\n"); + exit(1); + } + s = malloc_size(p); + fprintf(stderr, "size = 0x%zx\n", s); + // CHECK: size = 0x0 + describe_zone(p); + // CHECK: zone = no zone +} |