[clangd] Fix use-after-free with expected types in indexing
authorIlya Biryukov <ibiryukov@google.com>
Mon, 26 Nov 2018 15:52:16 +0000 (15:52 +0000)
committerIlya Biryukov <ibiryukov@google.com>
Mon, 26 Nov 2018 15:52:16 +0000 (15:52 +0000)
llvm-svn: 347563

clang-tools-extra/clangd/index/SymbolCollector.cpp

index 84aff8b..52a2069 100644 (file)
@@ -587,9 +587,11 @@ const Symbol *SymbolCollector::addDeclaration(const NamedDecl &ND,
   if (!Include.empty())
     S.IncludeHeaders.emplace_back(Include, 1);
 
+  llvm::Optional<OpaqueType> 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;