diff --git a/src/indexer.cc b/src/indexer.cc index a16fd12c..dd3de639 100644 --- a/src/indexer.cc +++ b/src/indexer.cc @@ -1244,6 +1244,7 @@ Index(SemaManager *manager, WorkingFiles *wfiles, VFS *vfs, Clang->getDiagnostics(), Clang->getInvocation().TargetOpts)); if (!Clang->hasTarget()) return {}; + Clang->getPreprocessorOpts().RetainRemappedFileBuffers = true; #if LLVM_VERSION_MAJOR >= 9 // rC357037 Clang->createFileManager(FS); #else @@ -1290,8 +1291,6 @@ Index(SemaManager *manager, WorkingFiles *wfiles, VFS *vfs, LOG_S(ERROR) << "failed to index " << main; return {}; } - for (auto &Buf : Bufs) - Buf.release(); std::vector> result; for (auto &it : param.UID2File) { diff --git a/src/sema_manager.cc b/src/sema_manager.cc index 8ebdca0a..9ee160bf 100644 --- a/src/sema_manager.cc +++ b/src/sema_manager.cc @@ -301,6 +301,7 @@ std::unique_ptr BuildCompilerInstance( Clang->getDiagnostics(), Clang->getInvocation().TargetOpts)); if (!Clang->hasTarget()) return nullptr; + Clang->getPreprocessorOpts().RetainRemappedFileBuffers = true; // Construct SourceManager with UserFilesAreVolatile: true because otherwise // RequiresNullTerminator: true may cause out-of-bounds read when a file is // mmap'ed but is saved concurrently. @@ -482,7 +483,6 @@ void *CompletionMain(void *manager_) { Clang->setCodeCompletionConsumer(task->Consumer.release()); if (!Parse(*Clang)) continue; - Buf.release(); task->on_complete(&Clang->getCodeCompletionConsumer()); } @@ -572,7 +572,6 @@ void *DiagnosticMain(void *manager_) { continue; if (!Parse(*Clang)) continue; - Buf.release(); auto Fill = [](const DiagBase &d, Diagnostic &ret) { ret.range = lsRange{{d.range.start.line, d.range.start.column},