forked from OSchip/llvm-project
[clangd] Fix a crash bug in AddUsing tweak around template handling.
Summary: The crash happened on cases like: template<typename TT> using one = two::three<T^T>; because we tried to call getName() on getBaseTypeIdentifier(), which can be nullptr. Ideally we would support this use case as well, but for now not crashing will do. Reviewers: sammccall Reviewed By: sammccall Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, usaxena95, cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D77656
This commit is contained in:
parent
a59008a3a5
commit
cca10be3f6
|
@ -206,9 +206,11 @@ bool AddUsing::prepare(const Selection &Inputs) {
|
|||
Name = D->getDecl()->getName();
|
||||
} else if (auto *T = Node->ASTNode.get<TypeLoc>()) {
|
||||
if (auto E = T->getAs<ElaboratedTypeLoc>()) {
|
||||
QualifierToRemove = E.getQualifierLoc();
|
||||
Name =
|
||||
E.getType().getUnqualifiedType().getBaseTypeIdentifier()->getName();
|
||||
if (auto *BaseTypeIdentifier =
|
||||
E.getType().getUnqualifiedType().getBaseTypeIdentifier()) {
|
||||
Name = BaseTypeIdentifier->getName();
|
||||
QualifierToRemove = E.getQualifierLoc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2436,6 +2436,7 @@ TEST_F(AddUsingTest, Prepare) {
|
|||
#define NS(name) one::two::name
|
||||
namespace one {
|
||||
void oo() {}
|
||||
template<typename TT> class tt {};
|
||||
namespace two {
|
||||
enum ee {};
|
||||
void ff() {}
|
||||
|
@ -2458,6 +2459,10 @@ public:
|
|||
EXPECT_UNAVAILABLE(Header +
|
||||
"void fun() { o^n^e^:^:^t^w^o^:^:^c^c^:^:^s^t inst; }");
|
||||
EXPECT_UNAVAILABLE(Header + "void fun() { N^S(c^c) inst; }");
|
||||
// This used to crash. Ideally we would support this case, but for now we just
|
||||
// test that we don't crash.
|
||||
EXPECT_UNAVAILABLE(Header +
|
||||
"template<typename TT> using foo = one::tt<T^T>;");
|
||||
}
|
||||
|
||||
TEST_F(AddUsingTest, Apply) {
|
||||
|
|
Loading…
Reference in New Issue