1*7dbc1d84SVitaly Buka // This file is distributed under the University of Illinois Open Source
2*7dbc1d84SVitaly Buka // License. See LICENSE.TXT for details.
3*7dbc1d84SVitaly Buka 
4*7dbc1d84SVitaly Buka // Check that allocation tracing from different threads does not cause
5*7dbc1d84SVitaly Buka // interleaving of stack traces.
6*7dbc1d84SVitaly Buka #include <assert.h>
7*7dbc1d84SVitaly Buka #include <cstddef>
8*7dbc1d84SVitaly Buka #include <cstdint>
9*7dbc1d84SVitaly Buka #include <cstring>
10*7dbc1d84SVitaly Buka #include <thread>
11*7dbc1d84SVitaly Buka 
12*7dbc1d84SVitaly Buka extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
13*7dbc1d84SVitaly Buka   auto C = [&] {
14*7dbc1d84SVitaly Buka     volatile void *a = malloc(5639);
15*7dbc1d84SVitaly Buka     free((void *)a);
16*7dbc1d84SVitaly Buka   };
17*7dbc1d84SVitaly Buka   std::thread T[] = {std::thread(C), std::thread(C), std::thread(C),
18*7dbc1d84SVitaly Buka                      std::thread(C), std::thread(C), std::thread(C)};
19*7dbc1d84SVitaly Buka   for (auto &X : T)
20*7dbc1d84SVitaly Buka     X.join();
21*7dbc1d84SVitaly Buka   return 0;
22*7dbc1d84SVitaly Buka }
23