17dbc1d84SVitaly Buka // This file is distributed under the University of Illinois Open Source
27dbc1d84SVitaly Buka // License. See LICENSE.TXT for details.
37dbc1d84SVitaly Buka 
47dbc1d84SVitaly Buka // Check that allocation tracing from different threads does not cause
57dbc1d84SVitaly Buka // interleaving of stack traces.
67dbc1d84SVitaly Buka #include <assert.h>
77dbc1d84SVitaly Buka #include <cstddef>
87dbc1d84SVitaly Buka #include <cstdint>
97dbc1d84SVitaly Buka #include <cstring>
10*e81e9441SKamil Rytarowski #include <cstdlib>
117dbc1d84SVitaly Buka #include <thread>
127dbc1d84SVitaly Buka 
137dbc1d84SVitaly Buka extern "C" int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) {
147dbc1d84SVitaly Buka   auto C = [&] {
157dbc1d84SVitaly Buka     volatile void *a = malloc(5639);
167dbc1d84SVitaly Buka     free((void *)a);
177dbc1d84SVitaly Buka   };
187dbc1d84SVitaly Buka   std::thread T[] = {std::thread(C), std::thread(C), std::thread(C),
197dbc1d84SVitaly Buka                      std::thread(C), std::thread(C), std::thread(C)};
207dbc1d84SVitaly Buka   for (auto &X : T)
217dbc1d84SVitaly Buka     X.join();
227dbc1d84SVitaly Buka   return 0;
237dbc1d84SVitaly Buka }
24