thread_end_with_ignore.cc revision 2d1fdb26e458c4ddc04155c1d421bced3ba90cd0
167bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// RUN: %clangxx_tsan -O1 %s -o %t && not %run %t 2>&1 | FileCheck %s
267bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe#include <pthread.h>
367bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe#include <stdio.h>
467bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe
567bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboeextern "C" void AnnotateIgnoreReadsBegin(const char *f, int l);
667bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe
767bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboevoid *Thread(void *x) {
867bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe  AnnotateIgnoreReadsBegin("", 0);
967bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe  return 0;
1067bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe}
1167bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe
1267bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboeint main() {
1367bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe  pthread_t t;
1467bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe  pthread_create(&t, 0, Thread, 0);
1567bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe  pthread_join(t, 0);
1667bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe}
1767bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe
1867bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK: ThreadSanitizer: thread T1  finished with ignores enabled, created at:
1967bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK:     #0 pthread_create
2067bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK:     #1 main
2167bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK:   Ignore was enabled at:
2267bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK:     #0 AnnotateIgnoreReadsBegin
2367bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe// CHECK:     #1 Thread
2467bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe
2567bf982340d95ca98098ea050b54b4c7adb116c0Jens Axboe