1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
8 // https://github.com/google/sanitizers/issues/412
10 // MAP_32BIT flag for mmap is supported only for x86_64.
16 // MAP_32BIT doesn't exist on OS X and NetBSD.
17 // UNSUPPORTED: darwin,netbsd
19 void *Thread(void *ptr
) {
21 barrier_wait(&barrier
);
26 barrier_init(&barrier
, 2);
27 void *ptr
= mmap(0, 128 << 10, PROT_READ
|PROT_WRITE
,
28 MAP_32BIT
|MAP_PRIVATE
|MAP_ANONYMOUS
, -1, 0);
29 fprintf(stderr
, "ptr=%p\n", ptr
);
30 if (ptr
== MAP_FAILED
) {
31 fprintf(stderr
, "mmap failed: %d\n", errno
);
34 if ((uintptr_t)ptr
>= (1ull << 32)) {
35 fprintf(stderr
, "ptr is too high\n");
39 pthread_create(&t
, 0, Thread
, ptr
);
40 barrier_wait(&barrier
);
43 munmap(ptr
, 128 << 10);
44 fprintf(stderr
, "DONE\n");
47 // CHECK: WARNING: ThreadSanitizer: data race