[PATCH] D55650: [clangd] Fix an assertion failure in background index.
Haojian Wu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Dec 14 04:42:30 PST 2018
This revision was automatically updated to reflect the committed changes.
Closed by commit rL349144: [clangd] Fix an assertion failure in background index. (authored by hokein, committed by ).
Herald added a subscriber: llvm-commits.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55650/new/
https://reviews.llvm.org/D55650
Files:
clang-tools-extra/trunk/clangd/index/Background.cpp
clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
Index: clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
===================================================================
--- clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
+++ clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
@@ -66,6 +66,25 @@
BackgroundIndexTest() { preventThreadStarvationInTests(); }
};
+TEST_F(BackgroundIndexTest, NoCrashOnErrorFile) {
+ MockFSProvider FS;
+ FS.Files[testPath("root/A.cc")] = "error file";
+ llvm::StringMap<std::string> Storage;
+ size_t CacheHits = 0;
+ MemoryShardStorage MSS(Storage, CacheHits);
+ OverlayCDB CDB(/*Base=*/nullptr);
+ BackgroundIndex Idx(Context::empty(), "", FS, CDB,
+ [&](llvm::StringRef) { return &MSS; });
+
+ tooling::CompileCommand Cmd;
+ Cmd.Filename = testPath("root/A.cc");
+ Cmd.Directory = testPath("root");
+ Cmd.CommandLine = {"clang++", "-DA=1", testPath("root/A.cc")};
+ CDB.setCompileCommand(testPath("root/A.cc"), Cmd);
+
+ ASSERT_TRUE(Idx.blockUntilIdleForTest());
+}
+
TEST_F(BackgroundIndexTest, IndexTwoFiles) {
MockFSProvider FS;
// a.h yields different symbols when included by A.cc vs B.cc.
Index: clang-tools-extra/trunk/clangd/index/Background.cpp
===================================================================
--- clang-tools-extra/trunk/clangd/index/Background.cpp
+++ clang-tools-extra/trunk/clangd/index/Background.cpp
@@ -382,6 +382,14 @@
if (!Action->Execute())
return createStringError(inconvertibleErrorCode(), "Execute() failed");
Action->EndSourceFile();
+ if (Clang->hasDiagnostics() &&
+ Clang->getDiagnostics().hasUncompilableErrorOccurred()) {
+ return createStringError(inconvertibleErrorCode(),
+ "IndexingAction failed: has uncompilable errors");
+ }
+
+ assert(Index.Symbols && Index.Refs && Index.Sources
+ && "Symbols, Refs and Sources must be set.");
log("Indexed {0} ({1} symbols, {2} refs, {3} files)",
Inputs.CompileCommand.Filename, Index.Symbols->size(),
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D55650.178221.patch
Type: text/x-patch
Size: 2041 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20181214/3724ef89/attachment.bin>
More information about the llvm-commits
mailing list