[clang-tools-extra] 0117328 - [clangd] Fix a crash in DefineInline
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Wed Aug 5 08:38:24 PDT 2020
Author: Kadir Cetinkaya
Date: 2020-08-05T17:38:17+02:00
New Revision: 011732852c2c1ca1015fac1bed831308dc521583
URL: https://github.com/llvm/llvm-project/commit/011732852c2c1ca1015fac1bed831308dc521583
DIFF: https://github.com/llvm/llvm-project/commit/011732852c2c1ca1015fac1bed831308dc521583.diff
LOG: [clangd] Fix a crash in DefineInline
Differential Revision: https://reviews.llvm.org/D85291
Added:
Modified:
clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp
clang-tools-extra/clangd/unittests/TweakTests.cpp
Removed:
################################################################################
diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp
index e28a2c46c374..698d2a406811 100644
--- a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp
+++ b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp
@@ -339,7 +339,7 @@ renameParameters(const FunctionDecl *Dest, const FunctionDecl *Source) {
// specialization.
const FunctionDecl *findTarget(const FunctionDecl *FD) {
auto CanonDecl = FD->getCanonicalDecl();
- if (!FD->isFunctionTemplateSpecialization())
+ if (!FD->isFunctionTemplateSpecialization() || CanonDecl == FD)
return CanonDecl;
// For specializations CanonicalDecl is the TemplatedDecl, which is not the
// target we want to inline into. Instead we traverse previous decls to find
diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp
index 319d9e088c2d..791965160055 100644
--- a/clang-tools-extra/clangd/unittests/TweakTests.cpp
+++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp
@@ -1093,6 +1093,11 @@ TEST_F(DefineInlineTest, TemplateSpec) {
template<> void f^oo<int>() {
bar();
})cpp");
+ EXPECT_UNAVAILABLE(R"cpp(
+ namespace bar {
+ template <typename T> void f^oo() {}
+ template void foo<int>();
+ })cpp");
}
TEST_F(DefineInlineTest, CheckForCanonDecl) {
More information about the cfe-commits
mailing list