From 4058595ccdcba895adbb791c6d7772036c41e20e Mon Sep 17 00:00:00 2001 From: Ilya Biryukov Date: Thu, 28 Dec 2017 13:10:15 +0000 Subject: [clangd] Skip function bodies when building the preamble Summary: To make building preambles faster and keep them smaller. Reviewers: sammccall Reviewed By: sammccall Subscribers: klimek, cfe-commits Differential Revision: https://reviews.llvm.org/D41495 git-svn-id: https://llvm.org/svn/llvm-project/clang-tools-extra/trunk@321521 91177308-0d34-0410-b5e6-96231b3b80d8 --- clangd/ClangdUnit.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/clangd/ClangdUnit.cpp b/clangd/ClangdUnit.cpp index 5fa8cd33..82ca109d 100644 --- a/clangd/ClangdUnit.cpp +++ b/clangd/ClangdUnit.cpp @@ -529,12 +529,22 @@ CppFile::deferRebuild(StringRef NewContents, IntrusiveRefCntPtr PreambleDiagsEngine = CompilerInstance::createDiagnostics( &CI->getDiagnosticOpts(), &PreambleDiagnosticsConsumer, false); + + // Skip function bodies when building the preamble to speed up building + // the preamble and make it smaller. + assert(!CI->getFrontendOpts().SkipFunctionBodies); + CI->getFrontendOpts().SkipFunctionBodies = true; + CppFilePreambleCallbacks SerializedDeclsCollector; auto BuiltPreamble = PrecompiledPreamble::Build( *CI, ContentsBuffer.get(), Bounds, *PreambleDiagsEngine, VFS, PCHs, /*StoreInMemory=*/That->StorePreamblesInMemory, SerializedDeclsCollector); + // When building the AST for the main file, we do want the function + // bodies. + CI->getFrontendOpts().SkipFunctionBodies = false; + if (BuiltPreamble) { log(Ctx, "Built preamble of size " + Twine(BuiltPreamble->getSize()) + " for file " + Twine(That->FileName)); -- cgit v1.2.3