]> git.proxmox.com Git - rustc.git/blob - src/compiler-rt/test/tsan/Darwin/malloc_size.mm
New upstream version 1.12.0+dfsg1
[rustc.git] / src / compiler-rt / test / tsan / Darwin / malloc_size.mm
1 // Test that malloc_zone_from_ptr returns a valid zone for a 0-sized allocation.
2
3 // RUN: %clang_tsan %s -o %t -framework Foundation
4 // RUN: %run %t 2>&1 | FileCheck %s
5
6 #include <malloc/malloc.h>
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <sys/mman.h>
10
11 int some_global;
12
13 void describe_zone(void *p) {
14 malloc_zone_t *z = malloc_zone_from_ptr(p);
15 if (z) {
16 fprintf(stderr, "zone = %p\n", z);
17 } else {
18 fprintf(stderr, "zone = no zone\n");
19 }
20 }
21
22 int main() {
23 void *p;
24 size_t s;
25
26 p = malloc(0x40);
27 s = malloc_size(p);
28 fprintf(stderr, "size = 0x%zx\n", s);
29 // CHECK: size = 0x40
30 describe_zone(p);
31 // CHECK: zone = 0x{{[0-9a-f]+}}
32
33 p = malloc(0);
34 s = malloc_size(p);
35 fprintf(stderr, "size = 0x%zx\n", s);
36 // CHECK: size = 0x1
37 describe_zone(p);
38 // CHECK: zone = 0x{{[0-9a-f]+}}
39
40 p = &some_global;
41 s = malloc_size(p);
42 fprintf(stderr, "size = 0x%zx\n", s);
43 // CHECK: size = 0x0
44 describe_zone(p);
45 // CHECK: zone = no zone
46
47 p = mmap(0, 0x1000, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, -1, 0);
48 if (!p) {
49 fprintf(stderr, "mmap failed\n");
50 exit(1);
51 }
52 s = malloc_size(p);
53 fprintf(stderr, "size = 0x%zx\n", s);
54 // CHECK: size = 0x0
55 describe_zone(p);
56 // CHECK: zone = no zone
57 }