[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:
Julian Lettner 2021-02-09 10:01:54 -08:00
parent a48bee2294
commit 9360f1a191
9 changed files with 23 additions and 23 deletions

View File

@ -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();
}

View File

@ -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;

View File

@ -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();

View File

@ -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();

View File

@ -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);
}

View File

@ -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;
}

View File

@ -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

View File

@ -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
}

View File

@ -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]]
}