This revision was automatically updated to reflect the committed changes. Closed by commit rG8e7bb37dfb00: [clangd] Fix crash in AddUsing tweak due to non-identifier DeclName (authored by adamcz, committed by hokein).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D79582/new/ https://reviews.llvm.org/D79582 Files: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp clang-tools-extra/clangd/unittests/TweakTests.cpp Index: clang-tools-extra/clangd/unittests/TweakTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/TweakTests.cpp +++ clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -2444,6 +2444,7 @@ public: struct st {}; static void mm() {} + cc operator|(const cc& x) const { return x; } }; } })cpp"; @@ -2463,6 +2464,9 @@ // 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"; Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp =================================================================== --- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp +++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp @@ -210,8 +210,10 @@ 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 =
Index: clang-tools-extra/clangd/unittests/TweakTests.cpp =================================================================== --- clang-tools-extra/clangd/unittests/TweakTests.cpp +++ clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -2444,6 +2444,7 @@ public: struct st {}; static void mm() {} + cc operator|(const cc& x) const { return x; } }; } })cpp"; @@ -2463,6 +2464,9 @@ // 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"; Index: clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp =================================================================== --- clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp +++ clang-tools-extra/clangd/refactor/tweaks/AddUsing.cpp @@ -210,8 +210,10 @@ 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 =
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits