diff options
author | Alex Lorenz <arphaman@gmail.com> | 2019-08-13 00:36:35 +0000 |
---|---|---|
committer | Alex Lorenz <arphaman@gmail.com> | 2019-08-13 00:36:35 +0000 |
commit | 3ffa688dfca4983655d1c9f79e60c70a6404da34 (patch) | |
tree | 27dbc21b93e3787e1ba73b959eaed14ae1941ef7 | |
parent | f4446f177505d5bd94f843a6d6a74f71e7320f22 (diff) | |
download | bcm5719-llvm-3ffa688dfca4983655d1c9f79e60c70a6404da34.tar.gz bcm5719-llvm-3ffa688dfca4983655d1c9f79e60c70a6404da34.zip |
clang-scan-deps: do not spawn threads when LLVM_ENABLE_THREADS is disabled
llvm-svn: 368640
-rw-r--r-- | clang/test/ClangScanDeps/regular_cdb.cpp | 1 | ||||
-rw-r--r-- | clang/tools/clang-scan-deps/ClangScanDeps.cpp | 47 |
2 files changed, 28 insertions, 20 deletions
diff --git a/clang/test/ClangScanDeps/regular_cdb.cpp b/clang/test/ClangScanDeps/regular_cdb.cpp index 95b3c5fd395..fd3157b7d75 100644 --- a/clang/test/ClangScanDeps/regular_cdb.cpp +++ b/clang/test/ClangScanDeps/regular_cdb.cpp @@ -1,4 +1,3 @@ -// REQUIRES: thread_support // RUN: rm -rf %t.dir // RUN: rm -rf %t.cdb // RUN: mkdir -p %t.dir diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp index 422799f3bf8..80b7af75329 100644 --- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp +++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp @@ -154,8 +154,12 @@ int main(int argc, const char **argv) { SharedStream DependencyOS(llvm::outs()); DependencyScanningService Service(ScanMode); +#if LLVM_ENABLE_THREADS unsigned NumWorkers = NumThreads == 0 ? llvm::hardware_concurrency() : NumThreads; +#else + unsigned NumWorkers = 1; +#endif std::vector<std::unique_ptr<DependencyScanningTool>> WorkerTools; for (unsigned I = 0; I < NumWorkers; ++I) WorkerTools.push_back(llvm::make_unique<DependencyScanningTool>( @@ -169,25 +173,30 @@ int main(int argc, const char **argv) { llvm::outs() << "Running clang-scan-deps on " << Inputs.size() << " files using " << NumWorkers << " workers\n"; for (unsigned I = 0; I < NumWorkers; ++I) { - WorkerThreads.emplace_back( - [I, &Lock, &Index, &Inputs, &HadErrors, &WorkerTools]() { - while (true) { - std::string Input; - StringRef CWD; - // Take the next input. - { - std::unique_lock<std::mutex> LockGuard(Lock); - if (Index >= Inputs.size()) - return; - const auto &Compilation = Inputs[Index++]; - Input = Compilation.first; - CWD = Compilation.second; - } - // Run the tool on it. - if (WorkerTools[I]->runOnFile(Input, CWD)) - HadErrors = true; - } - }); + auto Worker = [I, &Lock, &Index, &Inputs, &HadErrors, &WorkerTools]() { + while (true) { + std::string Input; + StringRef CWD; + // Take the next input. + { + std::unique_lock<std::mutex> LockGuard(Lock); + if (Index >= Inputs.size()) + return; + const auto &Compilation = Inputs[Index++]; + Input = Compilation.first; + CWD = Compilation.second; + } + // Run the tool on it. + if (WorkerTools[I]->runOnFile(Input, CWD)) + HadErrors = true; + } + }; +#if LLVM_ENABLE_THREADS + WorkerThreads.emplace_back(std::move(Worker)); +#else + // Run the worker without spawning a thread when threads are disabled. + Worker(); +#endif } for (auto &W : WorkerThreads) W.join(); |