34 lines
877 B
C++
34 lines
877 B
C++
// RUN: %clangxx_asan -O0 -w %s -o %t && not %run %t 2>&1 | FileCheck %s
|
|
|
|
// Checks that concurrent reports will not trigger false "nested bug" reports.
|
|
// Regression test for https://github.com/google/sanitizers/issues/858
|
|
|
|
#include <pthread.h>
|
|
#include <stdlib.h>
|
|
#include <unistd.h>
|
|
|
|
static void *start_routine(void *arg) {
|
|
volatile int *counter = (volatile int *)arg;
|
|
char buf[8];
|
|
__atomic_sub_fetch(counter, 1, __ATOMIC_SEQ_CST);
|
|
while (*counter)
|
|
;
|
|
buf[0] = buf[9];
|
|
return 0;
|
|
}
|
|
|
|
int main(void) {
|
|
const int n_threads = 8;
|
|
int i, counter = n_threads;
|
|
pthread_t thread;
|
|
|
|
for (i = 0; i < n_threads; ++i)
|
|
pthread_create(&thread, NULL, &start_routine, (void *)&counter);
|
|
sleep(5);
|
|
return 0;
|
|
}
|
|
|
|
// CHECK-NOT: nested bug
|
|
// CHECK: ERROR: AddressSanitizer: stack-buffer-overflow on address
|
|
// CHECK: SUMMARY: AddressSanitizer: stack-buffer-overflow
|