[PATCH] D116586: [clangd] Move the selection decltype hack to getSourceRange.
Haojian Wu via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 4 03:12:27 PST 2022
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGcb9ccd38c55f: [clangd] Move the selection decltype hack to getSourceRange. (authored by hokein).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116586/new/
https://reviews.llvm.org/D116586
Files:
clang-tools-extra/clangd/Selection.cpp
clang-tools-extra/clangd/unittests/SelectionTests.cpp
Index: clang-tools-extra/clangd/unittests/SelectionTests.cpp
===================================================================
--- clang-tools-extra/clangd/unittests/SelectionTests.cpp
+++ clang-tools-extra/clangd/unittests/SelectionTests.cpp
@@ -385,6 +385,7 @@
decltype([[^a]] + a) b;
)cpp",
"DeclRefExpr"},
+ {"[[decltype]]^(1) b;", "DecltypeTypeLoc"}, // Not the VarDecl.
// Objective-C nullability attributes.
{
Index: clang-tools-extra/clangd/Selection.cpp
===================================================================
--- clang-tools-extra/clangd/Selection.cpp
+++ clang-tools-extra/clangd/Selection.cpp
@@ -60,6 +60,21 @@
// Return the range covering a node and all its children.
SourceRange getSourceRange(const DynTypedNode &N) {
+ // DeclTypeTypeLoc::getSourceRange() is incomplete, which would lead to
+ // failing to descend into the child expression.
+ // decltype(2+2);
+ // ~~~~~~~~~~~~~ <-- correct range
+ // ~~~~~~~~ <-- range reported by getSourceRange()
+ // ~~~~~~~~~~~~ <-- range with this hack(i.e, missing closing paren)
+ // FIXME: Alter DecltypeTypeLoc to contain parentheses locations and get
+ // rid of this patch.
+ if (const auto *TL = N.get<TypeLoc>()) {
+ if (auto DT = TL->getAs<DecltypeTypeLoc>()) {
+ SourceRange S = DT.getSourceRange();
+ S.setEnd(DT.getUnderlyingExpr()->getEndLoc());
+ return S;
+ }
+ }
// MemberExprs to implicitly access anonymous fields should not claim any
// tokens for themselves. Given:
// struct A { struct { int b; }; };
@@ -647,17 +662,6 @@
// heuristics. We should consider only pruning critical TypeLoc nodes, to
// be more robust.
- // DeclTypeTypeLoc::getSourceRange() is incomplete, which would lead to
- // failing
- // to descend into the child expression.
- // decltype(2+2);
- // ~~~~~~~~~~~~~ <-- correct range
- // ~~~~~~~~ <-- range reported by getSourceRange()
- // ~~~~~~~~~~~~ <-- range with this hack(i.e, missing closing paren)
- // FIXME: Alter DecltypeTypeLoc to contain parentheses locations and get
- // rid of this patch.
- if (auto DT = TL->getAs<DecltypeTypeLoc>())
- S.setEnd(DT.getUnderlyingExpr()->getEndLoc());
// AttributedTypeLoc may point to the attribute's range, NOT the modified
// type's range.
if (auto AT = TL->getAs<AttributedTypeLoc>())
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116586.397248.patch
Type: text/x-patch
Size: 2453 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220104/a3a18da5/attachment.bin>
More information about the cfe-commits
mailing list