[clang-tools-extra] r346940 - Address comments
Kadir Cetinkaya via cfe-commits
cfe-commits at lists.llvm.org
Thu Nov 15 02:31:19 PST 2018
Author: kadircet
Date: Thu Nov 15 02:31:19 2018
New Revision: 346940
URL: http://llvm.org/viewvc/llvm-project?rev=346940&view=rev
Log:
Address comments
Modified:
clang-tools-extra/trunk/clangd/index/Background.cpp
clang-tools-extra/trunk/clangd/index/Background.h
clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
Modified: clang-tools-extra/trunk/clangd/index/Background.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Background.cpp?rev=346940&r1=346939&r2=346940&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/Background.cpp (original)
+++ clang-tools-extra/trunk/clangd/index/Background.cpp Thu Nov 15 02:31:19 2018
@@ -56,15 +56,77 @@ getShardPathFromFilePath(llvm::SmallStri
return ShardRoot;
}
+// Uses disk as a storage for index shards. Creates a directory called
+// ".clangd-index/" under the path provided during initialize.
+// Note: Requires initialize to be called before storing or retrieval.
+// This class is thread-safe.
+class DiskBackedIndexStorage : public BackgroundIndexStorage {
+ llvm::SmallString<128> DiskShardRoot;
+
+public:
+ llvm::Expected<IndexFileIn>
+ retrieveShard(llvm::StringRef ShardIdentifier) const override {
+ auto ShardPath = getShardPathFromFilePath(DiskShardRoot, ShardIdentifier);
+ auto Buffer = MemoryBuffer::getFile(ShardPath);
+ if (!Buffer) {
+ elog("Couldn't retrieve {0}: {1}", ShardPath,
+ Buffer.getError().message());
+ return llvm::make_error<llvm::StringError>(Buffer.getError());
+ }
+ // FIXME: Change readIndexFile to also look at Hash of the source that
+ // generated index and skip if there is a mismatch.
+ return readIndexFile(Buffer->get()->getBuffer());
+ }
+
+ bool storeShard(llvm::StringRef ShardIdentifier,
+ IndexFileOut Shard) const override {
+ auto ShardPath = getShardPathFromFilePath(DiskShardRoot, ShardIdentifier);
+ std::error_code EC;
+ llvm::raw_fd_ostream OS(ShardPath, EC);
+ if (EC) {
+ elog("Failed to open {0} for writing: {1}", ShardPath, EC.message());
+ return false;
+ }
+ OS << Shard;
+ return true;
+ }
+
+ // Initializes DiskShardRoot to (Directory + ".clangd-index/") which is the
+ // base directory for all shard files. After the initialization succeeds all
+ // subsequent calls are no-op.
+ DiskBackedIndexStorage(llvm::StringRef Directory) : DiskShardRoot(Directory) {
+ sys::path::append(DiskShardRoot, ".clangd-index/");
+ if (!llvm::sys::fs::exists(DiskShardRoot)) {
+ std::error_code OK;
+ std::error_code EC = llvm::sys::fs::create_directory(DiskShardRoot);
+ if (EC != OK) {
+ elog("Failed to create {0}: {1}", DiskShardRoot, EC.message());
+ }
+ }
+ }
+};
+
+SmallString<128> getAbsolutePath(const tooling::CompileCommand &Cmd) {
+ SmallString<128> AbsolutePath;
+ if (sys::path::is_absolute(Cmd.Filename)) {
+ AbsolutePath = Cmd.Filename;
+ } else {
+ AbsolutePath = Cmd.Directory;
+ sys::path::append(AbsolutePath, Cmd.Filename);
+ }
+ return AbsolutePath;
+}
+
} // namespace
-BackgroundIndex::BackgroundIndex(
- Context BackgroundContext, StringRef ResourceDir,
- const FileSystemProvider &FSProvider, ArrayRef<std::string> URISchemes,
- std::unique_ptr<ShardStorage> IndexShardStorage, size_t ThreadPoolSize)
+BackgroundIndex::BackgroundIndex(Context BackgroundContext,
+ StringRef ResourceDir,
+ const FileSystemProvider &FSProvider,
+ ArrayRef<std::string> URISchemes,
+ size_t ThreadPoolSize)
: SwapIndex(make_unique<MemIndex>()), ResourceDir(ResourceDir),
FSProvider(FSProvider), BackgroundContext(std::move(BackgroundContext)),
- URISchemes(URISchemes), IndexShardStorage(std::move(IndexShardStorage)) {
+ URISchemes(URISchemes) {
assert(ThreadPoolSize > 0 && "Thread pool size can't be zero.");
while (ThreadPoolSize--) {
ThreadPool.emplace_back([this] { run(); });
@@ -123,19 +185,58 @@ void BackgroundIndex::blockUntilIdleForT
void BackgroundIndex::enqueue(StringRef Directory,
tooling::CompileCommand Cmd) {
+ auto IndexStorage = BackgroundIndexStorage::getForDirectory(Directory);
+ if (IndexStorage)
+ loadShard(IndexStorage.get(), Cmd);
+ else
+ elog("No index storage for: {0}", Directory);
{
std::lock_guard<std::mutex> Lock(QueueMu);
- enqueueLocked(std::move(Cmd));
+ enqueueLocked(std::move(Cmd), std::move(IndexStorage));
}
QueueCV.notify_all();
}
+void BackgroundIndex::loadShard(BackgroundIndexStorage *IndexStorage,
+ const tooling::CompileCommand &Cmd) {
+ assert(IndexStorage && "No index storage to load from?");
+ auto AbsolutePath = getAbsolutePath(Cmd);
+ auto Shard = IndexStorage->retrieveShard(AbsolutePath);
+ if (Shard) {
+ // FIXME: Updated hashes once we have them in serialized format.
+ // IndexedFileDigests[AbsolutePath] = Hash;
+ IndexedSymbols.update(AbsolutePath,
+ make_unique<SymbolSlab>(std::move(*Shard->Symbols)),
+ make_unique<RefSlab>(std::move(*Shard->Refs)));
+
+ vlog("Loaded {0} from storage", AbsolutePath);
+ }
+}
+
+void BackgroundIndex::loadShards(
+ BackgroundIndexStorage *IndexStorage,
+ const std::vector<tooling::CompileCommand> &Cmds) {
+ assert(IndexStorage && "No index storage to load from?");
+ for (const auto &Cmd : Cmds)
+ loadShard(IndexStorage, Cmd);
+ // FIXME: Maybe we should get rid of this one once we start building index
+ // periodically? Especially if we also offload this task onto the queue.
+ vlog("Rebuilding automatic index");
+ reset(IndexedSymbols.buildIndex(IndexType::Light, DuplicateHandling::Merge,
+ URISchemes));
+}
+
void BackgroundIndex::enqueueAll(StringRef Directory,
const tooling::CompilationDatabase &CDB) {
trace::Span Tracer("BackgroundIndexEnqueueCDB");
// FIXME: this function may be slow. Perhaps enqueue a task to re-read the CDB
// from disk and enqueue the commands asynchronously?
auto Cmds = CDB.getAllCompileCommands();
+ auto IndexStorage = BackgroundIndexStorage::getForDirectory(Directory);
+ if (IndexStorage)
+ loadShards(IndexStorage.get(), Cmds);
+ else
+ elog("No index storage for: {0}", Directory);
SPAN_ATTACH(Tracer, "commands", int64_t(Cmds.size()));
std::mt19937 Generator(std::random_device{}());
std::shuffle(Cmds.begin(), Cmds.end(), Generator);
@@ -143,26 +244,23 @@ void BackgroundIndex::enqueueAll(StringR
{
std::lock_guard<std::mutex> Lock(QueueMu);
for (auto &Cmd : Cmds)
- enqueueLocked(std::move(Cmd));
+ enqueueLocked(std::move(Cmd), IndexStorage);
}
QueueCV.notify_all();
}
-void BackgroundIndex::enqueueLocked(tooling::CompileCommand Cmd) {
- // Initialize storage to project root. Since Initialize is no-op for multiple
- // calls we can simply call it for each file.
- if (IndexShardStorage && !IndexShardStorage->initialize(Cmd.Directory)) {
- elog("Failed to initialize shard storage");
- IndexShardStorage.reset();
- }
+void BackgroundIndex::enqueueLocked(
+ tooling::CompileCommand Cmd,
+ std::shared_ptr<BackgroundIndexStorage> IndexStorage) {
Queue.push_back(Bind(
- [this](tooling::CompileCommand Cmd) {
+ [this](tooling::CompileCommand Cmd,
+ std::shared_ptr<BackgroundIndexStorage> IndexStorage) {
std::string Filename = Cmd.Filename;
Cmd.CommandLine.push_back("-resource-dir=" + ResourceDir);
- if (auto Error = index(std::move(Cmd)))
+ if (auto Error = index(std::move(Cmd), IndexStorage.get()))
log("Indexing {0} failed: {1}", Filename, std::move(Error));
},
- std::move(Cmd)));
+ std::move(Cmd), std::move(IndexStorage)));
}
// Resolves URI to file paths with cache.
@@ -198,7 +296,8 @@ private:
/// Given index results from a TU, only update files in \p FilesToUpdate.
void BackgroundIndex::update(StringRef MainFile, SymbolSlab Symbols,
RefSlab Refs,
- const StringMap<FileDigest> &FilesToUpdate) {
+ const StringMap<FileDigest> &FilesToUpdate,
+ BackgroundIndexStorage *IndexStorage) {
// Partition symbols/references into files.
struct File {
DenseSet<const Symbol *> Symbols;
@@ -250,13 +349,14 @@ void BackgroundIndex::update(StringRef M
auto RS = llvm::make_unique<RefSlab>(std::move(Refs).build());
auto Hash = FilesToUpdate.lookup(Path);
- // Put shards into storage for subsequent use.
+ // We need to store shards before updating the index, since the latter
+ // consumes slabs.
// FIXME: Store Hash in the Shard.
- if (IndexShardStorage) {
+ if (IndexStorage) {
IndexFileOut Shard;
Shard.Symbols = SS.get();
Shard.Refs = RS.get();
- IndexShardStorage->storeShard(Path, Shard);
+ IndexStorage->storeShard(Path, Shard);
}
std::lock_guard<std::mutex> Lock(DigestsMu);
@@ -270,7 +370,8 @@ void BackgroundIndex::update(StringRef M
// Creates a filter to not collect index results from files with unchanged
// digests.
-// \p FileDigests contains file digests for the current indexed files, and all changed files will be added to \p FilesToUpdate.
+// \p FileDigests contains file digests for the current indexed files, and all
+// changed files will be added to \p FilesToUpdate.
decltype(SymbolCollector::Options::FileFilter) createFileFilter(
const llvm::StringMap<BackgroundIndex::FileDigest> &FileDigests,
llvm::StringMap<BackgroundIndex::FileDigest> &FilesToUpdate) {
@@ -299,16 +400,11 @@ decltype(SymbolCollector::Options::FileF
};
}
-Error BackgroundIndex::index(tooling::CompileCommand Cmd) {
+Error BackgroundIndex::index(tooling::CompileCommand Cmd,
+ BackgroundIndexStorage *IndexStorage) {
trace::Span Tracer("BackgroundIndex");
SPAN_ATTACH(Tracer, "file", Cmd.Filename);
- SmallString<128> AbsolutePath;
- if (sys::path::is_absolute(Cmd.Filename)) {
- AbsolutePath = Cmd.Filename;
- } else {
- AbsolutePath = Cmd.Directory;
- sys::path::append(AbsolutePath, Cmd.Filename);
- }
+ SmallString<128> AbsolutePath = getAbsolutePath(Cmd);
auto FS = FSProvider.getFileSystem();
auto Buf = FS->getBufferForFile(AbsolutePath);
@@ -323,18 +419,6 @@ Error BackgroundIndex::index(tooling::Co
if (IndexedFileDigests.lookup(AbsolutePath) == Hash) {
vlog("No need to index {0}, already up to date", AbsolutePath);
return Error::success();
- } else if (IndexShardStorage) { // Check if shard storage has the index.
- auto Shard = IndexShardStorage->retrieveShard(AbsolutePath, Hash);
- if (Shard) {
- // FIXME: We might still want to re-index headers.
- IndexedFileDigests[AbsolutePath] = Hash;
- IndexedSymbols.update(
- AbsolutePath, make_unique<SymbolSlab>(std::move(*Shard->Symbols)),
- make_unique<RefSlab>(std::move(*Shard->Refs)));
-
- vlog("Loaded {0} from storage", AbsolutePath);
- return Error::success();
- }
}
DigestsSnapshot = IndexedFileDigests;
@@ -384,7 +468,8 @@ Error BackgroundIndex::index(tooling::Co
Symbols.size(), Refs.numRefs());
SPAN_ATTACH(Tracer, "symbols", int(Symbols.size()));
SPAN_ATTACH(Tracer, "refs", int(Refs.numRefs()));
- update(AbsolutePath, std::move(Symbols), std::move(Refs), FilesToUpdate);
+ update(AbsolutePath, std::move(Symbols), std::move(Refs), FilesToUpdate,
+ IndexStorage);
{
// Make sure hash for the main file is always updated even if there is no
// index data in it.
@@ -401,59 +486,8 @@ Error BackgroundIndex::index(tooling::Co
return Error::success();
}
-llvm::Expected<IndexFileIn>
-DiskShardStorage::retrieveShard(llvm::StringRef ShardIdentifier,
- FileDigest Hash) const {
- assert(Initialized && "Not initialized?");
- llvm::SmallString<128> ShardPath;
- {
- std::lock_guard<std::mutex> Lock(DiskShardRootMu);
- ShardPath = getShardPathFromFilePath(DiskShardRoot, ShardIdentifier);
- }
- auto Buffer = MemoryBuffer::getFile(ShardPath);
- if (!Buffer) {
- elog("Couldn't retrieve {0}: {1}", ShardPath, Buffer.getError().message());
- return llvm::make_error<llvm::StringError>(Buffer.getError());
- }
- // FIXME: Change readIndexFile to also look at Hash of the source that
- // generated index and skip if there is a mismatch.
- return readIndexFile(Buffer->get()->getBuffer());
-}
-
-bool DiskShardStorage::storeShard(llvm::StringRef ShardIdentifier,
- IndexFileOut Shard) const {
- assert(Initialized && "Not initialized?");
- llvm::SmallString<128> ShardPath;
- {
- std::lock_guard<std::mutex> Lock(DiskShardRootMu);
- ShardPath = getShardPathFromFilePath(DiskShardRoot, ShardIdentifier);
- }
- std::error_code EC;
- llvm::raw_fd_ostream OS(ShardPath, EC);
- if (EC) {
- elog("Failed to open {0} for writing: {1}", ShardPath, EC.message());
- return false;
- }
- OS << Shard;
- return true;
-}
-
-bool DiskShardStorage::initialize(llvm::StringRef Directory) {
- if (Initialized)
- return true;
- std::lock_guard<std::mutex> Lock(DiskShardRootMu);
- DiskShardRoot = Directory;
- sys::path::append(DiskShardRoot, ".clangd-index/");
- if (!llvm::sys::fs::exists(DiskShardRoot)) {
- std::error_code OK;
- std::error_code EC = llvm::sys::fs::create_directory(DiskShardRoot);
- if (EC != OK) {
- elog("Failed to create {0}: {1}", DiskShardRoot, EC.message());
- return Initialized = false;
- }
- }
- return Initialized = true;
-}
+std::function<std::shared_ptr<BackgroundIndexStorage>(llvm::StringRef)>
+ BackgroundIndexStorage::Factory = nullptr;
} // namespace clangd
} // namespace clang
Modified: clang-tools-extra/trunk/clangd/index/Background.h
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clangd/index/Background.h?rev=346940&r1=346939&r2=346940&view=diff
==============================================================================
--- clang-tools-extra/trunk/clangd/index/Background.h (original)
+++ clang-tools-extra/trunk/clangd/index/Background.h Thu Nov 15 02:31:19 2018
@@ -28,15 +28,35 @@
namespace clang {
namespace clangd {
-// Base class for Shard Storage operations. See DiskShardStorage for more info.
-class ShardStorage {
+// Handles storage and retrieval of index shards.
+class BackgroundIndexStorage {
+private:
+ static std::function<std::shared_ptr<BackgroundIndexStorage>(llvm::StringRef)>
+ Factory;
+
public:
using FileDigest = decltype(llvm::SHA1::hash({}));
+
+ // Stores given shard associationg with ShardIdentifier, which can be
+ // retrieved later on with the same identifier.
virtual bool storeShard(llvm::StringRef ShardIdentifier,
IndexFileOut Shard) const = 0;
+
+ // Retrieves the shard if found, also returns hash for the source file that
+ // generated this shard.
virtual llvm::Expected<IndexFileIn>
- retrieveShard(llvm::StringRef ShardIdentifier, FileDigest Hash) const = 0;
- virtual bool initialize(llvm::StringRef Directory) = 0;
+ retrieveShard(llvm::StringRef ShardIdentifier) const = 0;
+
+ template <typename T> static void setStorageFactory(T Factory) {
+ BackgroundIndexStorage::Factory = Factory;
+ }
+
+ static std::shared_ptr<BackgroundIndexStorage>
+ getForDirectory(llvm::StringRef Directory) {
+ if (!Factory)
+ return nullptr;
+ return Factory(Directory);
+ }
};
// Builds an in-memory index by by running the static indexer action over
@@ -48,7 +68,6 @@ public:
// FIXME: resource-dir injection should be hoisted somewhere common.
BackgroundIndex(Context BackgroundContext, llvm::StringRef ResourceDir,
const FileSystemProvider &, ArrayRef<std::string> URISchemes,
- std::unique_ptr<ShardStorage> IndexShardStorage = nullptr,
size_t ThreadPoolSize = llvm::hardware_concurrency());
~BackgroundIndex(); // Blocks while the current task finishes.
@@ -72,17 +91,22 @@ public:
private:
/// Given index results from a TU, only update files in \p FilesToUpdate.
void update(llvm::StringRef MainFile, SymbolSlab Symbols, RefSlab Refs,
- const llvm::StringMap<FileDigest> &FilesToUpdate);
+ const llvm::StringMap<FileDigest> &FilesToUpdate,
+ BackgroundIndexStorage *IndexStorage);
+ void loadShard(BackgroundIndexStorage *IndexStorage,
+ const tooling::CompileCommand &Cmd);
+ void loadShards(BackgroundIndexStorage *IndexStorage,
+ const std::vector<tooling::CompileCommand> &Cmds);
// configuration
std::string ResourceDir;
const FileSystemProvider &FSProvider;
Context BackgroundContext;
std::vector<std::string> URISchemes;
- std::unique_ptr<ShardStorage> IndexShardStorage;
// index state
- llvm::Error index(tooling::CompileCommand);
+ llvm::Error index(tooling::CompileCommand,
+ BackgroundIndexStorage *IndexStorage);
FileSymbols IndexedSymbols;
llvm::StringMap<FileDigest> IndexedFileDigests; // Key is absolute file path.
@@ -91,7 +115,8 @@ private:
// queue management
using Task = std::function<void()>;
void run(); // Main loop executed by Thread. Runs tasks from Queue.
- void enqueueLocked(tooling::CompileCommand Cmd);
+ void enqueueLocked(tooling::CompileCommand Cmd,
+ std::shared_ptr<BackgroundIndexStorage> IndexStorage);
std::mutex QueueMu;
unsigned NumActiveTasks = 0; // Only idle when queue is empty *and* no tasks.
std::condition_variable QueueCV;
@@ -100,30 +125,6 @@ private:
std::vector<std::thread> ThreadPool; // FIXME: Abstract this away.
};
-// Handles storage and retrieval of index shards into disk. Requires Initialize
-// to be called before storing or retrieval. Creates a directory called
-// ".clangd-index/" under the path provided during initialize. This class is
-// thread-safe.
-class DiskShardStorage : public ShardStorage {
- mutable std::mutex DiskShardRootMu;
- llvm::SmallString<128> DiskShardRoot;
- bool Initialized;
-
-public:
- // Retrieves the shard if found and contents are consistent with the provided
- // Hash.
- llvm::Expected<IndexFileIn> retrieveShard(llvm::StringRef ShardIdentifier,
- FileDigest Hash) const;
-
- // Stores given shard with name ShardIdentifier under initialized directory.
- bool storeShard(llvm::StringRef ShardIdentifier, IndexFileOut Shard) const;
-
- // Initializes DiskShardRoot to (Directory + ".clangd-index/") which is the
- // base directory for all shard files. After the initialization succeeds all
- // subsequent calls or no-op.
- bool initialize(llvm::StringRef Directory);
-};
-
} // namespace clangd
} // namespace clang
Modified: clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp
URL: http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp?rev=346940&r1=346939&r2=346940&view=diff
==============================================================================
--- clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp (original)
+++ clang-tools-extra/trunk/unittests/clangd/BackgroundIndexTests.cpp Thu Nov 15 02:31:19 2018
@@ -79,7 +79,7 @@ TEST(BackgroundIndexTest, IndexTwoFiles)
}
TEST(BackgroundIndexTest, ShardStorageTest) {
- class MemoryShardStorage : public ShardStorage {
+ class MemoryShardStorage : public BackgroundIndexStorage {
mutable std::mutex StorageMu;
llvm::StringMap<std::string> &Storage;
size_t &CacheHits;
@@ -88,7 +88,8 @@ TEST(BackgroundIndexTest, ShardStorageTe
MemoryShardStorage(llvm::StringMap<std::string> &Storage, size_t &CacheHits)
: Storage(Storage), CacheHits(CacheHits) {}
- bool storeShard(llvm::StringRef ShardIdentifier, IndexFileOut Shard) const {
+ bool storeShard(llvm::StringRef ShardIdentifier,
+ IndexFileOut Shard) const override {
std::lock_guard<std::mutex> Lock(StorageMu);
std::string &str = Storage[ShardIdentifier];
llvm::raw_string_ostream OS(str);
@@ -96,8 +97,8 @@ TEST(BackgroundIndexTest, ShardStorageTe
OS.flush();
return true;
}
- llvm::Expected<IndexFileIn> retrieveShard(llvm::StringRef ShardIdentifier,
- FileDigest Hash) const {
+ llvm::Expected<IndexFileIn>
+ retrieveShard(llvm::StringRef ShardIdentifier) const override {
std::lock_guard<std::mutex> Lock(StorageMu);
if (Storage.find(ShardIdentifier) == Storage.end())
return llvm::make_error<llvm::StringError>(
@@ -118,17 +119,21 @@ TEST(BackgroundIndexTest, ShardStorageTe
)cpp";
FS.Files[testPath("root/A.cc")] =
"#include \"A.h\"\nvoid g() { (void)common; }";
+
llvm::StringMap<std::string> Storage;
size_t CacheHits = 0;
+ BackgroundIndexStorage::setStorageFactory(
+ [&Storage, &CacheHits](llvm::StringRef) {
+ return std::make_shared<MemoryShardStorage>(Storage, CacheHits);
+ });
+
tooling::CompileCommand Cmd;
Cmd.Filename = testPath("root/A.cc");
Cmd.Directory = testPath("root");
Cmd.CommandLine = {"clang++", testPath("root/A.cc")};
+ // Check nothing is loaded from Storage, but A.cc and A.h has been stored.
{
- BackgroundIndex Idx(
- Context::empty(), "", FS, /*URISchemes=*/{"unittest"},
- /*IndexShardStorage=*/
- llvm::make_unique<MemoryShardStorage>(Storage, CacheHits));
+ BackgroundIndex Idx(Context::empty(), "", FS, /*URISchemes=*/{"unittest"});
Idx.enqueue(testPath("root"), Cmd);
Idx.blockUntilIdleForTest();
}
@@ -137,11 +142,9 @@ TEST(BackgroundIndexTest, ShardStorageTe
EXPECT_NE(Storage.find(testPath("root/A.h")), Storage.end());
EXPECT_NE(Storage.find(testPath("root/A.cc")), Storage.end());
+ // Check A.cc has been loaded from cache.
{
- BackgroundIndex Idx(
- Context::empty(), "", FS, /*URISchemes=*/{"unittest"},
- /*IndexShardStorage=*/
- llvm::make_unique<MemoryShardStorage>(Storage, CacheHits));
+ BackgroundIndex Idx(Context::empty(), "", FS, /*URISchemes=*/{"unittest"});
Idx.enqueue(testPath("root"), Cmd);
Idx.blockUntilIdleForTest();
}
@@ -149,7 +152,6 @@ TEST(BackgroundIndexTest, ShardStorageTe
EXPECT_EQ(Storage.size(), 2U);
EXPECT_NE(Storage.find(testPath("root/A.h")), Storage.end());
EXPECT_NE(Storage.find(testPath("root/A.cc")), Storage.end());
- // B_CC is dropped as we don't collect symbols from A.h in this compilation.
}
} // namespace clangd
More information about the cfe-commits
mailing list