[Sanitizer] Fix sanitizer tests without reducing optimization levels
As discussed, these tests are compiled with optimization to mimic real
sanitizer usage [1].
Let's mark relevant functions with `noinline` so we can continue to
check against the stack traces in the report.
[1] https://reviews.llvm.org/D96198
This reverts commit 04af72c542.
Differential Revision: https://reviews.llvm.org/D96357
This commit is contained in:
parent
a48bee2294
commit
9360f1a191
|
|
@ -3,7 +3,7 @@
|
|||
// RUN: echo "fun:*Blacklisted_Thread2*" > %t.blacklist
|
||||
// RUN: echo "fun:*CallTouchGlobal*" >> %t.blacklist
|
||||
|
||||
// RUN: %clangxx_tsan %s -fsanitize-blacklist=%t.blacklist -o %t
|
||||
// RUN: %clangxx_tsan -O1 %s -fsanitize-blacklist=%t.blacklist -o %t
|
||||
// RUN: %deflake %run %t 2>&1 | FileCheck %s
|
||||
#include "test.h"
|
||||
|
||||
|
|
@ -18,13 +18,13 @@ void *Thread1(void *x) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void TouchGlobal() {
|
||||
void TouchGlobal() __attribute__((noinline)) {
|
||||
// CHECK: Previous write of size 4
|
||||
// CHECK: #0 TouchGlobal{{.*}}blacklist2.cpp:[[@LINE+1]]
|
||||
Global--;
|
||||
}
|
||||
|
||||
void CallTouchGlobal() {
|
||||
void CallTouchGlobal() __attribute__((noinline)) {
|
||||
// CHECK: #1 CallTouchGlobal{{.*}}blacklist2.cpp:[[@LINE+1]]
|
||||
TouchGlobal();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_tsan %s -o %t
|
||||
// RUN: %clang_tsan -O1 %s -o %t
|
||||
// RUN: %deflake %run %t | FileCheck %s --check-prefix=CHECK-NOZUPP
|
||||
// RUN: %env_tsan_opts=suppressions='%s.supp':print_suppressions=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-SUPP
|
||||
|
||||
|
|
@ -15,7 +15,7 @@ void *Thread1(void *x) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void *Thread2(void *x) {
|
||||
void *Thread2(void *x) __attribute__((noinline)) {
|
||||
barrier_wait(&barrier);
|
||||
pthread_mutex_lock(&mtx);
|
||||
mem[0] = 42;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_tsan %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -17,14 +17,14 @@ void foo(jmp_buf env) {
|
|||
x++;
|
||||
}
|
||||
|
||||
void badguy() {
|
||||
void badguy() __attribute__((noinline)) {
|
||||
pthread_mutex_t mtx;
|
||||
pthread_mutex_init(&mtx, 0);
|
||||
pthread_mutex_lock(&mtx);
|
||||
pthread_mutex_destroy(&mtx);
|
||||
}
|
||||
|
||||
void mymain() {
|
||||
void mymain() __attribute__((noinline)) {
|
||||
jmp_buf env;
|
||||
if (setjmp(env) == 42) {
|
||||
badguy();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clang_tsan %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
|
||||
#include <pthread.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -20,14 +20,14 @@ void foo(jmp_buf env) {
|
|||
x++;
|
||||
}
|
||||
|
||||
void badguy() {
|
||||
void badguy() __attribute__((noinline)) {
|
||||
pthread_mutex_t mtx;
|
||||
pthread_mutex_init(&mtx, 0);
|
||||
pthread_mutex_lock(&mtx);
|
||||
pthread_mutex_destroy(&mtx);
|
||||
}
|
||||
|
||||
void mymain() {
|
||||
void mymain() __attribute__((noinline)) {
|
||||
jmp_buf env;
|
||||
if (setjmp(env) == 42) {
|
||||
badguy();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: %clangxx_tsan %s -o %t && %deflake %run %t | FileCheck %s
|
||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
|
@ -14,7 +14,7 @@ void *Thread2(void *p) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
void *alloc() {
|
||||
void *alloc() __attribute__((noinline)) {
|
||||
return malloc(99);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,12 +1,12 @@
|
|||
// RUN: echo "race_top:TopFunction" > %t.supp
|
||||
// RUN: %clangxx_tsan %s -o %t
|
||||
// RUN: %clangxx_tsan -O1 %s -o %t
|
||||
// RUN: %env_tsan_opts=suppressions='%t.supp' %run %t 2>&1 | FileCheck %s
|
||||
// RUN: rm %t.supp
|
||||
#include "test.h"
|
||||
|
||||
int Global;
|
||||
|
||||
void TopFunction(int *p) {
|
||||
void TopFunction(int *p) __attribute__((noinline)) {
|
||||
*p = 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ void *Thread2(void *x) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
void StartThread(pthread_t *t, void *(*f)(void*)) {
|
||||
void __attribute__((noinline)) StartThread(pthread_t *t, void *(*f)(void*)) {
|
||||
pthread_create(t, NULL, f, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -46,14 +46,14 @@ int main() {
|
|||
return 0;
|
||||
}
|
||||
|
||||
// RUN: %clang_tsan %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
// RUN: %clang_tsan -O1 %s -o %t && %deflake %run %t 2>&1 | FileCheck %s
|
||||
|
||||
// Also check that functions instrumentation can be configured by either driver
|
||||
// or legacy flags:
|
||||
|
||||
// RUN: %clangxx_tsan %s -o %t -fno-sanitize-thread-func-entry-exit && %deflake %run %t 2>&1 \
|
||||
// RUN: %clangxx_tsan -O1 %s -o %t -fno-sanitize-thread-func-entry-exit && %deflake %run %t 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-FUNC-ENTRY-EXIT-OFF %s
|
||||
// RUN: %clangxx_tsan %s -o %t -mllvm -tsan-instrument-func-entry-exit=0 && %deflake %run %t 2>&1 \
|
||||
// RUN: %clangxx_tsan -O1 %s -o %t -mllvm -tsan-instrument-func-entry-exit=0 && %deflake %run %t 2>&1 \
|
||||
// RUN: | FileCheck --check-prefix=CHECK-FUNC-ENTRY-EXIT-OFF %s
|
||||
|
||||
// CHECK: WARNING: ThreadSanitizer: data race
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
// RUN: %clangxx_tsan %s -o %t && %deflake %run %t | FileCheck %s
|
||||
// RUN: %clangxx_tsan -O1 %s -o %t && %deflake %run %t | FileCheck %s
|
||||
#include "test.h"
|
||||
|
||||
int X = 0;
|
||||
|
||||
void MySleep() {
|
||||
void MySleep() __attribute__((noinline)) {
|
||||
sleep(1); // the sleep that must appear in the report
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +1,11 @@
|
|||
// RUN: %clangxx -fsanitize=return %gmlt %s -o %t
|
||||
// RUN: %clangxx -fsanitize=return %gmlt %s -O3 -o %t
|
||||
// RUN: not %run %t 2>&1 | FileCheck %s
|
||||
// RUN: %env_ubsan_opts=print_stacktrace=1 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-STACKTRACE
|
||||
// Error message does not exact what expected
|
||||
// XFAIL: openbsd
|
||||
|
||||
// CHECK: missing_return.cpp:[[@LINE+1]]:5: runtime error: execution reached the end of a value-returning function without returning a value
|
||||
int f() {
|
||||
int f() __attribute__((noinline)) {
|
||||
// CHECK-STACKTRACE: #0 {{.*}}f{{.*}}missing_return.cpp:[[@LINE-1]]
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue