[PATCH] D35406: [clangd] Replace ASTUnit with manual AST management.
Krasimir Georgiev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Wed Jul 19 06:15:28 PDT 2017
krasimir added inline comments.
================
Comment at: clangd/ClangdUnit.cpp:167
+ std::move(VFS));
+ CI->getFrontendOpts().DisableFree = false;
+ return CI;
----------------
Why `DisableFree`?
================
Comment at: clangd/ClangdUnit.cpp:251
+ CompilerInstance::createDiagnostics(new DiagnosticOptions,
+ &CommandLineDiagsConsumer, false);
+ CI = createCompilerInvocation(ArgStrs, CommandLineDiagsEngine, VFS);
----------------
What's the purpose of this local scope here?
Wouldn't &CommandLineDiagsConsumer point to garbage after the end of this local scope?
================
Comment at: clangd/ClangdUnit.cpp:262
+ ComputePreambleBounds(*CI->getLangOpts(), ContentsBuffer.get(), 0);
+ if (!Preamble || !Preamble->Preamble.CanReuse(*CI, ContentsBuffer.get(),
+ Bounds, VFS.get())) {
----------------
We can not compute `Bounds`, `if (Preamble)`.
================
Comment at: clangd/ClangdUnit.cpp:268
+ CompilerInstance::createDiagnostics(
+ &CI->getDiagnosticOpts(), &PreambleDiagnosticsConsumer, false);
+ ClangdUnitPreambleCallbacks SerializedDeclsCollector;
----------------
Here `PreambleDiagsEngine` holds a pointer to the local variable `PreambleDiagnosticsConsumer`.
Next, `BuiltPreamble` holds a reference to `PreambleDiagsEngine`.
Next, `Preamble` is created by moving `BuiltPreamble`.
Doesn't then `Preamble` hold a transitive reference to junk after this local scope?
================
Comment at: clangd/ClangdUnit.cpp:404
+ CI = createCompilerInvocation(ArgStrs, CommandLineDiagsEngine, VFS);
+ }
+ assert(CI && "Couldn't create CompilerInvocation");
----------------
what's the purpose of this local scope?
================
Comment at: clangd/ClangdUnit.cpp:691
+
+void ClangdUnit::ParsedAST::ensurePreambleDeclsDeserialized() {
+ if (PendingTopLevelDecls.empty())
----------------
Why do we need to ensure that Decls are deserialized?
================
Comment at: clangd/ClangdUnit.h:77
+ /// Stores and provides access to parsed AST.
+ class ParsedAST {
+ public:
----------------
Why is this a separate class and not just part of `ClangdUnit`?
https://reviews.llvm.org/D35406
More information about the cfe-commits
mailing list