[clangd] Fix case mismatch crash on in CDB on windows after 92dd077af1ff8
authorSam McCall <sam.mccall@gmail.com>
Wed, 23 Dec 2020 21:41:46 +0000 (22:41 +0100)
committerSam McCall <sam.mccall@gmail.com>
Wed, 23 Dec 2020 21:42:45 +0000 (22:42 +0100)
See https://github.com/clangd/clangd/issues/631

clang-tools-extra/clangd/GlobalCompilationDatabase.cpp

index 41b549c..86375fa 100644 (file)
@@ -511,11 +511,14 @@ void DirectoryBasedGlobalCompilationDatabase::broadcastCDB(
   // Given that we know that CDBs have been moved/generated, don't trust caches.
   // (This should be rare, so it's OK to add a little latency).
   constexpr auto IgnoreCache = std::chrono::steady_clock::time_point::max();
-  for (DirectoryCache *Dir : getDirectoryCaches(FileAncestors)) {
+  auto DirectoryCaches = getDirectoryCaches(FileAncestors);
+  assert(DirectoryCaches.size() == FileAncestors.size());
+  for (unsigned I = 0; I < DirectoryCaches.size(); ++I) {
     bool ShouldBroadcast = false;
-    if (Dir->get(Opts.TFS, ShouldBroadcast, /*FreshTime=*/IgnoreCache,
-                 /*FreshTimeMissing=*/IgnoreCache))
-      DirectoryHasCDB.find(Dir->Path)->setValue(true);
+    if (DirectoryCaches[I]->get(Opts.TFS, ShouldBroadcast,
+                                /*FreshTime=*/IgnoreCache,
+                                /*FreshTimeMissing=*/IgnoreCache))
+      DirectoryHasCDB.find(FileAncestors[I])->setValue(true);
   }
 
   std::vector<std::string> GovernedFiles;