[PATCH] D91298: Frontend: Always create a new FileManager in ASTUnit::CodeComplete
Duncan P. N. Exon Smith via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Nov 11 13:29:50 PST 2020
dexonsmith created this revision.
dexonsmith added reviewers: JDevlieghere, arphaman, jansvoboda11, akyrtzi.
Herald added a subscriber: ributzka.
dexonsmith requested review of this revision.
The filesystem underneath it may have changed. This matches other
`ASTUnit` entry points like `Reparse`, and unblocks implementing
remapped files in a VFS layer underneath the `FileManager` in a future
patch.
https://reviews.llvm.org/D91298
Files:
clang/include/clang/Frontend/ASTUnit.h
clang/lib/Frontend/ASTUnit.cpp
clang/tools/libclang/CIndexCodeCompletion.cpp
Index: clang/tools/libclang/CIndexCodeCompletion.cpp
===================================================================
--- clang/tools/libclang/CIndexCodeCompletion.cpp
+++ clang/tools/libclang/CIndexCodeCompletion.cpp
@@ -359,8 +359,6 @@
: CXCodeCompleteResults(), DiagOpts(new DiagnosticOptions),
Diag(new DiagnosticsEngine(
IntrusiveRefCntPtr<DiagnosticIDs>(new DiagnosticIDs), &*DiagOpts)),
- FileMgr(std::move(FileMgr)),
- SourceMgr(new SourceManager(*Diag, *this->FileMgr)),
CodeCompletionAllocator(
std::make_shared<clang::GlobalCodeCompletionAllocator>()),
Contexts(CXCompletionContext_Unknown),
@@ -755,14 +753,15 @@
LibclangInvocationReporter InvocationReporter(
*CXXIdx, LibclangInvocationReporter::OperationKind::CompletionOperation,
TU->ParsingOptions, CArgs, CompletionInvocation, unsaved_files);
- AST->CodeComplete(complete_filename, complete_line, complete_column,
- RemappedFiles, (options & CXCodeComplete_IncludeMacros),
- (options & CXCodeComplete_IncludeCodePatterns),
- IncludeBriefComments, Capture,
- CXXIdx->getPCHContainerOperations(), *Results->Diag,
- Results->LangOpts, *Results->SourceMgr, *Results->FileMgr,
- Results->Diagnostics, Results->TemporaryBuffers);
-
+ AST->CodeComplete(
+ complete_filename, complete_line, complete_column, RemappedFiles,
+ (options & CXCodeComplete_IncludeMacros),
+ (options & CXCodeComplete_IncludeCodePatterns), IncludeBriefComments,
+ Capture, CXXIdx->getPCHContainerOperations(), *Results->Diag,
+ Results->LangOpts, Results->Diagnostics, Results->TemporaryBuffers);
+
+ Results->FileMgr = &AST->getFileManager();
+ Results->SourceMgr = &AST->getSourceManager();
Results->DiagnosticsWrappers.resize(Results->Diagnostics.size());
// Keep a reference to the allocator used for cached global completions, so
Index: clang/lib/Frontend/ASTUnit.cpp
===================================================================
--- clang/lib/Frontend/ASTUnit.cpp
+++ clang/lib/Frontend/ASTUnit.cpp
@@ -2132,8 +2132,8 @@
bool IncludeCodePatterns, bool IncludeBriefComments,
CodeCompleteConsumer &Consumer,
std::shared_ptr<PCHContainerOperations> PCHContainerOps,
- DiagnosticsEngine &Diag, LangOptions &LangOpts, SourceManager &SourceMgr,
- FileManager &FileMgr, SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
+ DiagnosticsEngine &Diag, LangOptions &LangOpts,
+ SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
SmallVectorImpl<const llvm::MemoryBuffer *> &OwnedBuffers) {
if (!Invocation)
return;
@@ -2211,9 +2211,12 @@
Language::LLVM_IR &&
"IR inputs not support here!");
- // Use the source and file managers that we were given.
- Clang->setFileManager(&FileMgr);
- Clang->setSourceManager(&SourceMgr);
+ // Initialize file and source managers up front so that the caller can access
+ // them after.
+ Clang->createFileManager(FS);
+ FileMgr = &Clang->getFileManager();
+ Clang->createSourceManager(*FileMgr);
+ SourceMgr = &Clang->getSourceManager();
// Remap files.
PreprocessorOpts.clearRemappedFiles();
Index: clang/include/clang/Frontend/ASTUnit.h
===================================================================
--- clang/include/clang/Frontend/ASTUnit.h
+++ clang/include/clang/Frontend/ASTUnit.h
@@ -876,7 +876,6 @@
CodeCompleteConsumer &Consumer,
std::shared_ptr<PCHContainerOperations> PCHContainerOps,
DiagnosticsEngine &Diag, LangOptions &LangOpts,
- SourceManager &SourceMgr, FileManager &FileMgr,
SmallVectorImpl<StoredDiagnostic> &StoredDiagnostics,
SmallVectorImpl<const llvm::MemoryBuffer *> &OwnedBuffers);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91298.304637.patch
Type: text/x-patch
Size: 3928 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20201111/1bb755ea/attachment.bin>
More information about the cfe-commits
mailing list