16a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// Test that blacklisted functions are still contained in the stack trace. 26a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 36a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: echo "fun:*Blacklisted_Thread2*" > %t.blacklist 46a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: echo "fun:*CallTouchGlobal*" >> %t.blacklist 56a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 66a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: %clangxx_tsan -O1 %s -fsanitize-blacklist=%t.blacklist -o %t 76a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines// RUN: %deflake %run %t 2>&1 | FileCheck %s 886277eb844c4983c81de62d7c050e92fe7155788Stephen Hines#include "test.h" 96a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 106a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesint Global; 116a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 126a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesvoid *Thread1(void *x) { 1386277eb844c4983c81de62d7c050e92fe7155788Stephen Hines barrier_wait(&barrier); 146a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: ThreadSanitizer: data race 156a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: Write of size 4 166a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: #0 Thread1{{.*}}blacklist2.cc:[[@LINE+1]] 176a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines Global++; 186a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines return NULL; 196a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 206a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 216a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesvoid TouchGlobal() { 226a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: Previous write of size 4 236d1862363c88c183b0ed7740fca876342cf0474bStephen Hines // CHECK: #0 TouchGlobal{{.*}}blacklist2.cc:[[@LINE+1]] 246a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines Global--; 256a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 266a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 276a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesvoid CallTouchGlobal() { 286a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: #1 CallTouchGlobal{{.*}}blacklist2.cc:[[@LINE+1]] 296a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines TouchGlobal(); 306a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 316a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 326a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesvoid *Blacklisted_Thread2(void *x) { 336a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines Global--; 346a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines // CHECK: #2 Blacklisted_Thread2{{.*}}blacklist2.cc:[[@LINE+1]] 356a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines CallTouchGlobal(); 3686277eb844c4983c81de62d7c050e92fe7155788Stephen Hines barrier_wait(&barrier); 376a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines return NULL; 386a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 396a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines 406a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hinesint main() { 4186277eb844c4983c81de62d7c050e92fe7155788Stephen Hines barrier_init(&barrier, 2); 426a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines pthread_t t[2]; 436a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines pthread_create(&t[0], NULL, Thread1, NULL); 446a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines pthread_create(&t[1], NULL, Blacklisted_Thread2, NULL); 456a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines pthread_join(t[0], NULL); 466a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines pthread_join(t[1], NULL); 47c58a43648cd6121c51a2e795a28e2ef90d7813e6Pirama Arumuga Nainar fprintf(stderr, "PASS\n"); 486a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines return 0; 496a211c5814e25d6745a5058cc0e499e5235d3821Stephen Hines} 50