sammccall added a comment.

It's not obvious whether/why this is the right thing to do.

One set of reasoning that occurs to me:

- headers without guards produce code in some context-sensitive way, they only 
exist in the context of their including file
- for the symbols they produce, we have ways to reconcile across contexts - by 
symbol ID
- but for refs, there's no such context of identity
- therefore it's not clear whether a ref in an unguarded header should be 
tracked once, once per include, or not at all. Not at all is defensible.

This falls down a bit though when we see that in practice we'll often have refs 
to the same symbol, from the same location, with the same role - this is a 
reasonable way to reconcile.

If this is just a way to trim down index size, we should consider codebases 
other than LLVM, as it seems pretty likely the use of generated files there is 
atypical.



================
Comment at: clangd/index/SymbolCollector.cpp:479
   const auto &SM = ASTCtx->getSourceManager();
+  llvm::DenseSet<FileID> CanonicalHeaders;
+  for (auto &IT : PP->macros()) {
----------------
High-level comment - what are you doing here? Why?


================
Comment at: clangd/index/SymbolCollector.cpp:479
   const auto &SM = ASTCtx->getSourceManager();
+  llvm::DenseSet<FileID> CanonicalHeaders;
+  for (auto &IT : PP->macros()) {
----------------
sammccall wrote:
> High-level comment - what are you doing here? Why?
Use of "canonical" here and elsewhere isn't obvious to me - does this name come 
from somewhere?

"Modular" is how I would describe these headers - it's imprecise, but you could 
define it somewhere.


Repository:
  rCTE Clang Tools Extra

https://reviews.llvm.org/D53808



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to