[PATCH] D66349: [clangd] Fix one testcase in XRefsTests.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Fri Aug 16 07:35:18 PDT 2019
hokein created this revision.
hokein added a reviewer: ilya-biryukov.
Herald added subscribers: kadircet, arphaman, jkorous, MaskRay.
Herald added a project: clang.
The test didn't test anything actually -- it used "[]" as annotation which should be
"[[]]".
This patch also fixes a bug in XRef where we may return duplicated refs.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D66349
Files:
clang-tools-extra/clangd/XRefs.cpp
clang-tools-extra/clangd/unittests/XRefsTests.cpp
Index: clang-tools-extra/clangd/unittests/XRefsTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/XRefsTests.cpp
+++ clang-tools-extra/clangd/unittests/XRefsTests.cpp
@@ -2037,35 +2037,36 @@
TEST(FindReferences, ExplicitSymbols) {
const char *Tests[] = {
R"cpp(
- struct Foo { Foo* [self]() const; };
+ struct Foo { Foo* [[self]]() const; };
void f() {
- if (Foo* T = foo.[^self]()) {} // Foo member call expr.
+ Foo foo;
+ if (Foo* T = foo.[[^self]]()) {} // Foo member call expr.
}
)cpp",
R"cpp(
struct Foo { Foo(int); };
Foo f() {
- int [b];
- return [^b]; // Foo constructor expr.
+ int [[b]];
+ return [[^b]]; // Foo constructor expr.
}
)cpp",
R"cpp(
struct Foo {};
void g(Foo);
- Foo [f]();
+ Foo [[f]]();
void call() {
- g([^f]()); // Foo constructor expr.
+ g([[^f]]()); // Foo constructor expr.
}
)cpp",
R"cpp(
- void [foo](int);
- void [foo](double);
+ void [[foo]](int);
+ void [[foo]](double);
namespace ns {
- using ::[fo^o];
+ using ::[[fo^o]];
}
)cpp",
};
@@ -2075,6 +2076,7 @@
std::vector<Matcher<Location>> ExpectedLocations;
for (const auto &R : T.ranges())
ExpectedLocations.push_back(RangeIs(R));
+ ASSERT_TRUE(!ExpectedLocations.empty()) << "Testcase must provide ranges!";
EXPECT_THAT(findReferences(AST, T.point(), 0),
ElementsAreArray(ExpectedLocations))
<< Test;
Index: clang-tools-extra/clangd/XRefs.cpp
===================================================================
--- clang-tools-extra/clangd/XRefs.cpp
+++ clang-tools-extra/clangd/XRefs.cpp
@@ -383,18 +383,17 @@
}
std::vector<Reference> take() && {
+ // We only use the Loc to do the comparsion as a location can refer
+ // to different declarations, e.g. usingDecl refers to overload functions.
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;
});
// We sometimes see duplicates when parts of the AST get traversed twice.
- References.erase(
- std::unique(References.begin(), References.end(),
- [](const Reference &L, const Reference &R) {
- return std::tie(L.CanonicalTarget, L.Loc, L.Role) ==
- std::tie(R.CanonicalTarget, R.Loc, R.Role);
- }),
- References.end());
+ References.erase(std::unique(References.begin(), References.end(),
+ [](const Reference &L, const Reference &R) {
+ return L.Loc == R.Loc;
+ }),
+ References.end());
return std::move(References);
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66349.215601.patch
Type: text/x-patch
Size: 3065 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190816/c036d14b/attachment.bin>
More information about the cfe-commits
mailing list