1// RUN: %clangxx_tsan %s -o %t
2// RUN: %run %t 2>&1 | FileCheck %s
3
4#include <iostream>
5#include <future>
6#include <vector>
7
8int main(int argc, const char *argv[]) {
9 fprintf(stderr, "Hello world.\n");
10
11 auto my_task = [] { return 42; };
12
13 std::vector<std::thread> threads;
14
15 for (int i = 0; i < 100; i++) {
16 std::packaged_task<int(void)> task(my_task);
17 std::future<int> future = task.get_future();
18 threads.push_back(std::thread(std::move(task)));
19 }
20
21 for (auto &t : threads) {
22 t.join();
23 }
24
25 fprintf(stderr, "Done.\n");
26}
27
28// CHECK: Hello world.
29// CHECK-NOT: WARNING: ThreadSanitizer
30// CHECK: Done.
31

source code of compiler-rt/test/tsan/Darwin/libcxx-future.mm