diff options
Diffstat (limited to 'lib/tsan/lit_tests/user_malloc.cc')
| -rw-r--r-- | lib/tsan/lit_tests/user_malloc.cc | 27 | 
1 files changed, 27 insertions, 0 deletions
| diff --git a/lib/tsan/lit_tests/user_malloc.cc b/lib/tsan/lit_tests/user_malloc.cc new file mode 100644 index 0000000000000..0be6d54fb13a7 --- /dev/null +++ b/lib/tsan/lit_tests/user_malloc.cc @@ -0,0 +1,27 @@ +// RUN: %clangxx_tsan -O1 %s -o %t && %t 2>&1 | FileCheck %s +#include <stdio.h> + +// defined by tsan. +extern "C" void *__interceptor_malloc(unsigned long size); +extern "C" void __interceptor_free(void *p); + +extern "C" void *malloc(unsigned long size) { +  static int first = 0; +  if (__sync_lock_test_and_set(&first, 1) == 0) +    printf("user malloc\n"); +  return __interceptor_malloc(size); +} + +extern "C" void free(void *p) { +  __interceptor_free(p); +} + +int main() { +  volatile char *p = (char*)malloc(10); +  p[0] = 0; +  free((void*)p); +} + +// CHECK: user malloc +// CHECK-NOT: ThreadSanitizer + | 
