[PATCH] D87225: [clangd] When finding refs for a template specialization, do not return refs to other specializations

Haojian Wu via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Sep 8 00:40:35 PDT 2020


hokein added inline comments.


================
Comment at: clang-tools-extra/clangd/XRefs.cpp:1150
     // DeclRelation::Underlying.
-    DeclRelationSet Relations = DeclRelation::TemplatePattern |
+    DeclRelationSet Relations = DeclRelation::TemplateInstantiation |
                                 DeclRelation::Alias | DeclRelation::Underlying;
----------------
IIRC, clangd's index doesn't distinguish refs of template specifications/primary templates, all refs are treated as primary templates -- if we query refs for a template specification from the index, we'll get no results, so we will end up with refs from the main file (which are from the AST) only.


================
Comment at: clang-tools-extra/clangd/unittests/XRefsTests.cpp:1574
+       class Foo {};
        void func([[Fo^o]]<int>);
       )cpp",
----------------
hmm, the new behavior seems wired (at least in this case), I thought it is a bug at first glance, then I realized that this is xrefs for template specification. I'd expect to see  the primary template in refs in xrefs result.

however if there is an explicit template specification, excluding the primary template maybe reasonable.

```
template <typename T>
class Foo {};
template <> class [[Foo]]<int> {};
void func([[Fo^o]]<int>);
```


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D87225



More information about the cfe-commits mailing list