diff --git a/src/indexer.cc b/src/indexer.cc index d788aaf1..240ca756 100644 --- a/src/indexer.cc +++ b/src/indexer.cc @@ -1248,6 +1248,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 @@ -1302,8 +1303,6 @@ Index(SemaManager *manager, WorkingFiles *wfiles, VFS *vfs, << (reason.empty() ? "" : ": " + reason); 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 f4326722..02070c84 100644 --- a/src/sema_manager.cc +++ b/src/sema_manager.cc @@ -302,6 +302,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. @@ -490,7 +491,6 @@ void *CompletionMain(void *manager_) { Clang->setCodeCompletionConsumer(task->Consumer.release()); if (!Parse(*Clang)) continue; - Buf.release(); task->on_complete(&Clang->getCodeCompletionConsumer()); } @@ -580,7 +580,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},