mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-19 05:46:45 +00:00
tsan: fix warnings in tests
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
This commit is contained in:
parent
60c60dd138
commit
d78782f6a6
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
void __attribute__((noinline)) bar(int *mem) {
|
||||
mem[0] = 42;
|
||||
__attribute__((noinline)) void baz(void *mem) {
|
||||
free(mem);
|
||||
}
|
||||
|
||||
__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:
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user