From b9213dfec4d8ce42d90507c25545564f4a0bbfb8 Mon Sep 17 00:00:00 2001 From: Sam McCall Date: Mon, 11 Nov 2019 19:00:44 +0100 Subject: [PATCH] [clangd] Fix crash in DefineInline::prepare() --- clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp | 2 +- clang-tools-extra/clangd/unittests/TweakTests.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp index f6966f6..6d0599e 100644 --- a/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/DefineInline.cpp @@ -388,7 +388,7 @@ public: if (!SelNode) return false; Source = getSelectedFunction(SelNode); - if (!Source || !Source->isThisDeclarationADefinition()) + if (!Source || !Source->hasBody()) return false; // Only the last level of template parameter locations are not kept in AST, // so if we are inlining a method that is in a templated class, there is no diff --git a/clang-tools-extra/clangd/unittests/TweakTests.cpp b/clang-tools-extra/clangd/unittests/TweakTests.cpp index 5a6df2e..ab28088 100644 --- a/clang-tools-extra/clangd/unittests/TweakTests.cpp +++ b/clang-tools-extra/clangd/unittests/TweakTests.cpp @@ -920,6 +920,9 @@ TEST_F(DefineInlineTest, TriggersOnFunctionDecl) { [[(void)(5+3); return;]] }]] + + // Definition with no body. + class Bar { Bar() = def^ault; } )cpp"); } -- 2.7.4