[PATCH] D66349: [clangd] Fix one testcase in XRefsTests.
Ilya Biryukov via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 19 01:44:26 PDT 2019
ilya-biryukov added inline comments.
================
Comment at: clang-tools-extra/clangd/XRefs.cpp:389
llvm::sort(References, [](const Reference &L, const Reference &R) {
- return std::tie(L.Loc, L.CanonicalTarget, L.Role) <
- std::tie(R.Loc, R.CanonicalTarget, R.Role);
+ return L.Loc < R.Loc;
});
----------------
hokein wrote:
> ilya-biryukov wrote:
> > What are the elements `References` for the problematic case?
> >
> > If we have duplicate elements, then `sort()` would now give us one of the items. Which exact `Decl` we're gonna end up seeing is not well-defined, i.e. it's non-deterministic.
> > What are the elements References for the problematic case?
>
> The testcase is using declarations (see the existing test) -- we will get 3 refs on `using ::fo^o`, each ref has a different decl.
>
> ```
> void [[foo]](int);
> void [[foo]](double);
>
> namespace ns {
> using ::[[fo^o]];
> }
> ```
>
> > If we have duplicate elements, then sort() would now give us one of the items. Which exact Decl we're gonna end up seeing is not well-defined, i.e. it's non-deterministic.
>
> I think we could make it deterministic, but only return one refs, WDYT?
>
>
To make sure I understand the problem: we used to get 4 references in total:
- 2 references to the functions (`foo(int)` and `foo(double)`)
- 2 references pointing to the using declaration, e.g. the `using ::[foo]]`
After this patch we would remove the duplicate `using ::[[foo]]` from the results and get only 3 references as a result.
Is that correct?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66349/new/
https://reviews.llvm.org/D66349
More information about the cfe-commits
mailing list