diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp index 2a96b305bd7a2..789c10bdd4822 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineOutline.cpp @@ -239,6 +239,8 @@ getFunctionSourceCode(const FunctionDecl *FD, const DeclContext *TargetContext, return; for (const NamedDecl *ND : Ref.Targets) { + if (ND->getKind() == Decl::TemplateTypeParm) + return; if (ND->getDeclContext() != Ref.Targets.front()->getDeclContext()) { elog("Targets from multiple contexts: {0}, {1}", printQualifiedName(*Ref.Targets.front()), diff --git a/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp b/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp index 1af1bc31bf648..d2d2ae9e7bb61 100644 --- a/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp +++ b/clang-tools-extra/clangd/unittests/tweaks/DefineOutlineTests.cpp @@ -411,14 +411,14 @@ inline typename O1::template O2::E O1::template O2 R"cpp( struct Foo { template - void ^bar() {} + T ^bar() { return {}; } };)cpp", R"cpp( struct Foo { template - void bar() ; + T bar() ; };template -inline void Foo::bar() {} +inline T Foo::bar() { return {}; } )cpp", ""}, @@ -426,14 +426,14 @@ inline void Foo::bar() {} { R"cpp( template struct Foo { - template void ^bar(const T& t, const U& u) {} + template T ^bar(const T& t, const U& u) { return {}; } };)cpp", R"cpp( template struct Foo { - template void bar(const T& t, const U& u) ; + template T bar(const T& t, const U& u) ; };template template -inline void Foo::bar(const T& t, const U& u) {} +inline T Foo::bar(const T& t, const U& u) { return {}; } )cpp", ""}, };