[PATCH] D65510: [clangd] Fix implicit template instatiations appearing as topLevelDecls.

Johan Vikström via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Aug 2 06:35:15 PDT 2019


jvikstrom marked 2 inline comments as done.
jvikstrom added inline comments.


================
Comment at: clang-tools-extra/clangd/ClangdUnit.cpp:68
+  if (const auto *TD = dyn_cast<T>(D))
+    return TD->getTemplateSpecializationKind() == TSK_ImplicitInstantiation;
+  return false;
----------------
ilya-biryukov wrote:
> hokein wrote:
> > ilya-biryukov wrote:
> > > We also want to skip `TSK_ExplicitInstantiationDeclaration` and  `TSK_ExplicitInstantiationDefinition` here.
> > > This covers cases like (not sure which one of the two enum values we get, though):
> > > ```
> > > template <class T>
> > > int foo(T) { ... }
> > > 
> > > template int foo(int); // we'd rather not traverse these, highlightings will run into the same problems.
> > > ```
> > > 
> > > Semantics I'm describing are roughly similar to `isImplicitInstatiation(D) == !isExplicitInstantion(D)`, where `isExplicitInstantiation` is taken from `CodeComplete.cpp`. (If we ignore `TSK_Undeclared`, which, I believe, should never be encountered in decls passed to HandleTopLevelDecl).
> > > 
> > > Please extract the helper from code complete and this one into a separate file (e.g. `clangd/AST.h`) and possibly implement one through the other
> > > Semantics I'm describing are roughly similar to isImplicitInstatiation(D) == !isExplicitInstantion(D), 
> > 
> > I think there is a typo here, I believe you mean `isImplicitInstantiation(D) == !isExplicitSpecialization(D) ` (in CodeComplete.cpp, it checks whether a Decl is an explicit **specialization**).
> Yes, there's a typo thanks!
Still want me to move this and the helper from CodeComplete to `AST.h` as it isn't used anywhere else? (esp. when we can't implement them through of each other)


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D65510/new/

https://reviews.llvm.org/D65510





More information about the cfe-commits mailing list