diff options
Diffstat (limited to 'clang/tools/libclang')
| -rw-r--r-- | clang/tools/libclang/CIndex.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/tools/libclang/CIndex.cpp b/clang/tools/libclang/CIndex.cpp index d2d00571c1d..554edd824ef 100644 --- a/clang/tools/libclang/CIndex.cpp +++ b/clang/tools/libclang/CIndex.cpp @@ -34,8 +34,10 @@ #include "llvm/Support/CrashRecoveryContext.h" #include "llvm/Support/MemoryBuffer.h" #include "llvm/Support/Timer.h" +#include "llvm/System/Mutex.h" #include "llvm/System/Program.h" #include "llvm/System/Signals.h" +#include "llvm/System/Threading.h" // Needed to define L_TMPNAM on some systems. #include <cstdio> @@ -1910,6 +1912,9 @@ bool CursorVisitor::VisitAttributes(Decl *D) { return false; } +static llvm::sys::Mutex EnableMultithreadingMutex; +static bool EnabledMultithreading; + extern "C" { CXIndex clang_createIndex(int excludeDeclarationsFromPCH, int displayDiagnostics) { @@ -1917,6 +1922,15 @@ CXIndex clang_createIndex(int excludeDeclarationsFromPCH, // enable it. llvm::CrashRecoveryContext::Enable(); + // Enable support for multithreading in LLVM. + { + llvm::sys::ScopedLock L(EnableMultithreadingMutex); + if (!EnabledMultithreading) { + llvm::llvm_start_multithreaded(); + EnabledMultithreading = true; + } + } + CIndexer *CIdxr = new CIndexer(); if (excludeDeclarationsFromPCH) CIdxr->setOnlyLocalDecls(); @@ -1928,8 +1942,6 @@ CXIndex clang_createIndex(int excludeDeclarationsFromPCH, void clang_disposeIndex(CXIndex CIdx) { if (CIdx) delete static_cast<CIndexer *>(CIdx); - if (getenv("LIBCLANG_TIMING")) - llvm::TimerGroup::printAll(llvm::errs()); } void clang_setUseExternalASTGeneration(CXIndex CIdx, int value) { |

