diff --git a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp --- a/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp +++ b/clang-tools-extra/clangd/refactor/tweaks/ExtractFunction.cpp @@ -248,6 +248,13 @@ // FIXME: Support extraction from templated functions. if (Func->isTemplated()) return nullptr; + for (const auto *S : Func->getBody()->children()) { + // During apply phase, we perform semantic analysis (e.g. figure out + // what variables requires hoisting). We cannot perform those when the + // body has invalid statements, so fail up front. + if (!S) + return nullptr; + } return Func; } }