| // RUN: %clangxx_lsan -O2 %s --std=c++14 -o %t && %run %t | |
| #include <atomic> | |
| #include <memory> | |
| #include <sanitizer/lsan_interface.h> | |
| #include <thread> | |
| #include <vector> | |
| std::atomic<bool> done; | |
| void foo() { | |
| std::unique_ptr<char[]> mem; | |
| while (!done) | |
| mem.reset(new char[1000000]); | |
| } | |
| int main() { | |
| std::vector<std::thread> threads; | |
| for (int i = 0; i < 10; ++i) | |
| threads.emplace_back(foo); | |
| for (int i = 0; i < 100; ++i) | |
| __lsan_do_recoverable_leak_check(); | |
| done = true; | |
| for (auto &t : threads) | |
| t.join(); | |
| return 0; | |
| } |