tsan: fix warnings in tests
authorDmitry Vyukov <dvyukov@google.com>
Wed, 28 Apr 2021 06:36:03 +0000 (08:36 +0200)
committerDmitry Vyukov <dvyukov@google.com>
Thu, 29 Apr 2021 05:42:18 +0000 (07:42 +0200)
Fix format specifier.
Fix warnings about non-standard attribute placement.
Make free_race2.c test a bit more interesting:
test access with/without an offset.

Reviewed By: vitalybuka

Differential Revision: https://reviews.llvm.org/D101424

compiler-rt/test/tsan/fiber_cleanup.cpp
compiler-rt/test/tsan/free_race.c
compiler-rt/test/tsan/free_race2.c
compiler-rt/test/tsan/sleep_sync.cpp

index 494830e..b914b0b 100644 (file)
@@ -9,7 +9,7 @@
 long count_memory_mappings() {
   pid_t my_pid = getpid();
   char proc_file_name[128];
-  snprintf(proc_file_name, sizeof(proc_file_name), "/proc/%ld/maps", my_pid);
+  snprintf(proc_file_name, sizeof(proc_file_name), "/proc/%d/maps", my_pid);
 
   FILE *proc_file = fopen(proc_file_name, "r");
   long line_count = 0;
index eb66233..af86b44 100644 (file)
@@ -15,7 +15,7 @@ void *Thread1(void *x) {
   return NULL;
 }
 
-void *Thread2(void *x) __attribute__((noinline)) {
+__attribute__((noinline)) void *Thread2(void *x) {
   barrier_wait(&barrier);
   pthread_mutex_lock(&mtx);
   mem[0] = 42;
index de6b2ae..a2137a7 100644 (file)
@@ -1,23 +1,34 @@
 // RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
+// RUN: %clang_tsan -O1 -DACCESS_OFFSET=4 %s -o %t && %deflake %run %t | FileCheck %s
 #include <stdlib.h>
 
-void __attribute__((noinline)) foo(int *mem) {
+#ifndef ACCESS_OFFSET
+#define ACCESS_OFFSET 0
+#endif
+
+__attribute__((noinline)) void foo(void *mem) {
+  free(mem);
+}
+
+__attribute__((noinline)) void baz(void *mem) {
   free(mem);
 }
 
-void __attribute__((noinline)) bar(int *mem) {
-  mem[0] = 42;
+__attribute__((noinline)) void bar(void *mem) {
+  *(long*)((char*)mem + ACCESS_OFFSET) = 42;
 }
 
 int main() {
-  int *mem = (int*)malloc(100);
+  void *mem = malloc(100);
+  baz(mem);
+  mem = malloc(100);
   foo(mem);
   bar(mem);
   return 0;
 }
 
 // CHECK: WARNING: ThreadSanitizer: heap-use-after-free
-// CHECK:   Write of size 4 at {{.*}} by main thread:
+// CHECK:   Write of size 8 at {{.*}} by main thread:
 // CHECK:     #0 bar
 // CHECK:     #1 main
 // CHECK:   Previous write of size 8 at {{.*}} by main thread:
index 3b2bfd0..7d6787e 100644 (file)
@@ -3,7 +3,7 @@
 
 int X = 0;
 
-void MySleep() __attribute__((noinline)) {
+__attribute__((noinline)) void MySleep() {
   sleep(1);  // the sleep that must appear in the report
 }