From 4d3d82eef96e10a54e3d0bf367d8e10917ca8662 Mon Sep 17 00:00:00 2001 From: Ilya Biryukov Date: Mon, 26 Nov 2018 15:52:16 +0000 Subject: [PATCH] [clangd] Fix use-after-free with expected types in indexing llvm-svn: 347563 --- clang-tools-extra/clangd/index/SymbolCollector.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/clang-tools-extra/clangd/index/SymbolCollector.cpp b/clang-tools-extra/clangd/index/SymbolCollector.cpp index 84aff8b..52a2069 100644 --- a/clang-tools-extra/clangd/index/SymbolCollector.cpp +++ b/clang-tools-extra/clangd/index/SymbolCollector.cpp @@ -587,9 +587,11 @@ const Symbol *SymbolCollector::addDeclaration(const NamedDecl &ND, if (!Include.empty()) S.IncludeHeaders.emplace_back(Include, 1); + llvm::Optional TypeStorage; if (S.Flags & Symbol::IndexedForCodeCompletion) { - if (auto T = OpaqueType::fromCompletionResult(*ASTCtx, SymbolCompletion)) - S.Type = T->raw(); + TypeStorage = OpaqueType::fromCompletionResult(*ASTCtx, SymbolCompletion); + if (TypeStorage) + S.Type = TypeStorage->raw(); } S.Origin = Opts.Origin; -- 2.7.4