summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/include/clang/Frontend/ASTUnit.h3
-rw-r--r--clang/lib/Frontend/ASTUnit.cpp5
-rw-r--r--clang/tools/CIndex/CIndex.cpp3
3 files changed, 7 insertions, 4 deletions
diff --git a/clang/include/clang/Frontend/ASTUnit.h b/clang/include/clang/Frontend/ASTUnit.h
index 0ce473f2af5..dd3db393436 100644
--- a/clang/include/clang/Frontend/ASTUnit.h
+++ b/clang/include/clang/Frontend/ASTUnit.h
@@ -88,7 +88,8 @@ public:
Diagnostic &Diags,
FileManager &FileMgr,
std::string *ErrMsg = 0,
- bool OnlyLocalDecls = false);
+ bool OnlyLocalDecls = false,
+ bool UseBumpAllocator = false);
};
} // namespace clang
diff --git a/clang/lib/Frontend/ASTUnit.cpp b/clang/lib/Frontend/ASTUnit.cpp
index 15002385a8c..7ee66486998 100644
--- a/clang/lib/Frontend/ASTUnit.cpp
+++ b/clang/lib/Frontend/ASTUnit.cpp
@@ -95,7 +95,8 @@ ASTUnit *ASTUnit::LoadFromPCHFile(const std::string &Filename,
Diagnostic &Diags,
FileManager &FileMgr,
std::string *ErrMsg,
- bool OnlyLocalDecls) {
+ bool OnlyLocalDecls,
+ bool UseBumpAllocator) {
llvm::OwningPtr<ASTUnit> AST(new ASTUnit(Diags));
AST->OnlyLocalDecls = OnlyLocalDecls;
AST->HeaderInfo.reset(new HeaderSearch(FileMgr));
@@ -146,7 +147,7 @@ ASTUnit *ASTUnit::LoadFromPCHFile(const std::string &Filename,
PP.getIdentifierTable(),
PP.getSelectorTable(),
PP.getBuiltinInfo(),
- /* FreeMemory = */ true,
+ /* FreeMemory = */ !UseBumpAllocator,
/* size_reserve = */0));
ASTContext &Context = *AST->Ctx.get();
diff --git a/clang/tools/CIndex/CIndex.cpp b/clang/tools/CIndex/CIndex.cpp
index d0638d07728..d355025da91 100644
--- a/clang/tools/CIndex/CIndex.cpp
+++ b/clang/tools/CIndex/CIndex.cpp
@@ -323,7 +323,8 @@ CXTranslationUnit clang_createTranslationUnit(
return ASTUnit::LoadFromPCHFile(astName, CXXIdx->getDiagnostics(),
CXXIdx->getFileManager(), &ErrMsg,
- CXXIdx->getOnlyLocalDecls());
+ CXXIdx->getOnlyLocalDecls(),
+ /* UseBumpAllocator = */ true);
}
CXTranslationUnit clang_createTranslationUnitFromSourceFile(
OpenPOWER on IntegriCloud