From bd225cff89348181f715ac6ed8c44a38e0805fa5 Mon Sep 17 00:00:00 2001 From: Eric Liu Date: Wed, 4 Jul 2018 09:43:35 +0000 Subject: [PATCH] [clangd] Avoid collecting symbols from broken TUs in global-symbol-builder. Summary: For example, template parameter might not be resolved in a broken TU, which can result in wrong USR/SymbolID. Reviewers: ilya-biryukov Subscribers: MaskRay, jkorous, cfe-commits Differential Revision: https://reviews.llvm.org/D48881 llvm-svn: 336252 --- .../clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/clang-tools-extra/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp b/clang-tools-extra/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp index 1ea73b5..1cfda57 100644 --- a/clang-tools-extra/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp +++ b/clang-tools-extra/clangd/global-symbol-builder/GlobalSymbolBuilderMain.cpp @@ -82,6 +82,14 @@ public: void EndSourceFileAction() override { WrapperFrontendAction::EndSourceFileAction(); + const auto &CI = getCompilerInstance(); + if (CI.hasDiagnostics() && + (CI.getDiagnosticClient().getNumErrors() > 0)) { + llvm::errs() << "Found errors in the translation unit. Igoring " + "collected symbols...\n"; + return; + } + auto Symbols = Collector->takeSymbols(); for (const auto &Sym : Symbols) { Ctx->reportResult(Sym.ID.str(), SymbolToYAML(Sym)); -- 2.7.4