annotate compiler-rt/test/tsan/map32bit.cpp @ 266:00f31e85ec16 default tip

Added tag current for changeset 31d058e83c98
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 14 Oct 2023 10:13:55 +0900
parents 1f2b6ac9f198
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 // RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
anatofuz
parents:
diff changeset
2 #include "test.h"
anatofuz
parents:
diff changeset
3 #include <stdint.h>
anatofuz
parents:
diff changeset
4 #include <errno.h>
anatofuz
parents:
diff changeset
5 #include <sys/mman.h>
anatofuz
parents:
diff changeset
6
anatofuz
parents:
diff changeset
7 // Test for issue:
anatofuz
parents:
diff changeset
8 // https://github.com/google/sanitizers/issues/412
anatofuz
parents:
diff changeset
9
anatofuz
parents:
diff changeset
10 // MAP_32BIT flag for mmap is supported only for x86_64.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
11 // XFAIL: target=mips{{.*}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
12 // XFAIL: target=aarch64{{.*}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
13 // XFAIL: target=powerpc64{{.*}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
14 // XFAIL: target=s390x{{.*}}
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
15 // XFAIL: target=loongarch64{{.*}}
150
anatofuz
parents:
diff changeset
16
anatofuz
parents:
diff changeset
17 // MAP_32BIT doesn't exist on OS X and NetBSD.
252
1f2b6ac9f198 LLVM16-1
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 223
diff changeset
18 // UNSUPPORTED: darwin,target={{.*netbsd.*}}
150
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 void *Thread(void *ptr) {
anatofuz
parents:
diff changeset
21 *(int*)ptr = 42;
anatofuz
parents:
diff changeset
22 barrier_wait(&barrier);
anatofuz
parents:
diff changeset
23 return 0;
anatofuz
parents:
diff changeset
24 }
anatofuz
parents:
diff changeset
25
anatofuz
parents:
diff changeset
26 int main() {
anatofuz
parents:
diff changeset
27 barrier_init(&barrier, 2);
anatofuz
parents:
diff changeset
28 void *ptr = mmap(0, 128 << 10, PROT_READ|PROT_WRITE,
anatofuz
parents:
diff changeset
29 MAP_32BIT|MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
anatofuz
parents:
diff changeset
30 fprintf(stderr, "ptr=%p\n", ptr);
anatofuz
parents:
diff changeset
31 if (ptr == MAP_FAILED) {
anatofuz
parents:
diff changeset
32 fprintf(stderr, "mmap failed: %d\n", errno);
anatofuz
parents:
diff changeset
33 return 1;
anatofuz
parents:
diff changeset
34 }
anatofuz
parents:
diff changeset
35 if ((uintptr_t)ptr >= (1ull << 32)) {
anatofuz
parents:
diff changeset
36 fprintf(stderr, "ptr is too high\n");
anatofuz
parents:
diff changeset
37 return 1;
anatofuz
parents:
diff changeset
38 }
anatofuz
parents:
diff changeset
39 pthread_t t;
anatofuz
parents:
diff changeset
40 pthread_create(&t, 0, Thread, ptr);
anatofuz
parents:
diff changeset
41 barrier_wait(&barrier);
anatofuz
parents:
diff changeset
42 *(int*)ptr = 42;
anatofuz
parents:
diff changeset
43 pthread_join(t, 0);
anatofuz
parents:
diff changeset
44 munmap(ptr, 128 << 10);
anatofuz
parents:
diff changeset
45 fprintf(stderr, "DONE\n");
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 // CHECK: WARNING: ThreadSanitizer: data race
anatofuz
parents:
diff changeset
49 // CHECK: DONE