[PATCH] D68124: [clangd] Fix template type aliases in findExplicitReference

Kadir Cetinkaya via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 27 09:29:02 PDT 2019


kadircet accepted this revision.
kadircet added a comment.
This revision is now accepted and ready to land.

LGTM.



================
Comment at: clang-tools-extra/clangd/FindTarget.cpp:478
+          explicitReferenceTargets(DynTypedNode::create(L.getType()),
+                                   DeclRelation::Alias)};
     }
----------------
ilya-biryukov wrote:
> kadircet wrote:
> > can you explain why these two are special and get to keep `Alias` decls? Whereas the others dont?
> There are two cases to consider for a reference of the form `Templ<int>` in type positions:
> 1. `Templ` is a template type alias
> ```
> template <class X>
> Templ = vector<X>;
> ```
> in this case `targetDecl` returns `Templ` with mask `Alias | TemplatePattern`  and `vector<int>` with mask `Underlying`
> since we are interested in the thing explicitly written in the source code, we want `Templ` and **not** `vector`.
> 
> 2. `Templ` is a name of some template type (a class or template template parameter)
> in this case `targetDecl` returns `Templ` with mask `TemplatePattern` and that's what we want to return, since this is what was written in the source code.
> 
> So in both cases the important thing is to **not** filter-out the result with mask `Alias`. This is exactly what this patch does.
thanks! I was rather asking for comments in the code though :D

Please also mention them in comments.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D68124





More information about the cfe-commits mailing list