[clang-tools-extra] [clangd] Drop the optimization where only shards for modified files are updated in the background index (PR #140651)

Nathan Ridge via cfe-commits cfe-commits at lists.llvm.org
Tue May 20 14:04:51 PDT 2025


HighCommander4 wrote:

> I am afraid this doesn't address [clangd/clangd#1104](https://github.com/clangd/clangd/issues/1104) to a useful extent :/.
> 
> Whenever a header `foo.h` changes, clangd will schedule indexing of only a **single** translation unit that depends on it, not all of them. So if there are other TUs that reference `foo`, they'll still stay stale.

Good catch, thanks; I had overlooked that.

(I added an additional testcase demonstrating this, mostly for my own future reference / as a reference for anyone else who might pick this up.)

> I believe the performance trade-offs here are overwhelming and it'll result in pretty much re-indexing of whole project at every rebase or slight modifications to headers (we can't satisfy correctness without rebuilding all the TUs that depend on a changed header, rather than a single one).

FWIW, my expectation as a user is that when a header is modified, that **does** trigger re-indexing of all source files that include the header. I don't think the performance impact of this is that catastrophic, as the number of headers in a project tends to vary inversely with how widely they're included (i.e. most headers will have a few includers, and a few will have many). In my mind, the scenario is comparable to modifying a header and then **rebuilding**: if the header is widely included, you will rebuild many TUs, and programmers expect that (and adopt practices like forward declarations, pimpl, etc. to avoid unnecessary header dependencies).

Anyways, I agree that the patch in its current form is not useful. I'll mark it as a draft, and (when time permits) will re-work it to implement a "proper" (all dependent TUs rebuilt) update procedure. We can then discuss what the trigger for that procedure should be (explicit invocation, clangd restart, file-save of header, etc.).

https://github.com/llvm/llvm-project/pull/140651


More information about the cfe-commits mailing list