summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlex Lorenz <arphaman@gmail.com>2019-08-13 00:36:35 +0000
committerAlex Lorenz <arphaman@gmail.com>2019-08-13 00:36:35 +0000
commit3ffa688dfca4983655d1c9f79e60c70a6404da34 (patch)
tree27dbc21b93e3787e1ba73b959eaed14ae1941ef7
parentf4446f177505d5bd94f843a6d6a74f71e7320f22 (diff)
downloadbcm5719-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.cpp1
-rw-r--r--clang/tools/clang-scan-deps/ClangScanDeps.cpp47
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();
OpenPOWER on IntegriCloud