[clang-tools-extra] 8e7bb37 - [clangd] Fix crash in AddUsing tweak due to non-identifier DeclName
Haojian Wu via cfe-commits
cfe-commits at lists.llvm.org
Fri May 8 05:27:18 PDT 2020
Author: Adam Czachorowski
Date: 2020-05-08T14:26:21+02:00
New Revision: 8e7bb37dfb00bddd12cb44b75d57548330d32527
URL: https://github.com/llvm/llvm-project/commit/8e7bb37dfb00bddd12cb44b75d57548330d32527
DIFF: https://github.com/llvm/llvm-project/commit/8e7bb37dfb00bddd12cb44b75d57548330d32527.diff
LOG: [clangd] Fix crash in AddUsing tweak due to non-identifier DeclName
Patch by Adam Czachorowski!
Reviewers: hokein
Reviewed By: hokein
Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits
Tags: #clang
Differential Revision: https://reviews.llvm.org/D79582
Added:
Modified:
clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
clang-tools-extra/clangd/unittests/TweakTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
index af063ba273dc..9e64ceeeaead 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp
@@ -210,8 +210,10 @@ bool AddUsing::prepare(const Selection &Inputs) {
return false;
if (auto *D = Node->ASTNode.get<DeclRefExpr>()) {
- QualifierToRemove = D->getQualifierLoc();
- Name = D->getDecl()->getName();
+ if (auto *II = D->getDecl()->getIdentifier()) {
+ QualifierToRemove = D->getQualifierLoc();
+ Name = II->getName();
+ }
} else if (auto *T = Node->ASTNode.get<TypeLoc>()) {
if (auto E = T->getAs<ElaboratedTypeLoc>()) {
if (auto *BaseTypeIdentifier =
diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp
index cda31b5f068d..95f086f77386 100644
--- a/clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -2444,6 +2444,7 @@ class cc {
public:
struct st {};
static void mm() {}
+ cc operator|(const cc& x) const { return x; }
};
}
})cpp";
@@ -2463,6 +2464,9 @@ class cc {
// test that we don't crash.
EXPECT_UNAVAILABLE(Header +
"template<typename TT> using foo = one::tt<T^T>;");
+ // Test that we don't crash or misbehave on unnamed DeclRefExpr.
+ EXPECT_UNAVAILABLE(Header +
+ "void fun() { one::two::cc() ^| one::two::cc(); }");
// Check that we do not trigger in header files.
FileName = "test.h";
More information about the cfe-commits
mailing list