kbobyrev added inline comments.

================
Comment at: clang-tools-extra/clangd/index/CanonicalIncludes.cpp:73
+      auto Filename = SM.getFileEntryForID(SM.getFileID(Range.getBegin()))
+                          ->tryGetRealPathName();
+      Includes->addMapping(Filename, isLiteralInclude(Text)
----------------
sammccall wrote:
> sammccall wrote:
> > offline we had discussed getName rather than tryGetRealPathName instead.
> > 
> > The comment in HeaderStructure says specifically that we avoid 
> > tryGetRealPathName because it's not preserved in the preamble.
> > I suspect that this will give incorrect results in cases involving 
> > non-preamble `#includes`.
> > 
> > In any case we should have a comment somewhere on CanonicalIncludes about 
> > how we're identifying files, and why it's stable enough. The lack of such a 
> > comment is really what led to the bug on friday :-)
> tryGetRealPathName can be the empty string, what do we do in such cases?
> 
> (In practice I think this is going to happen in the case where you have a 
> non-preamble `#include` of a header-guarded file which was also part of the 
> preamble) 
Oh, okay, I thought `tryGetRealPathName` would not be empty here :(

The problem with `getName` is that it turned out to produce the same results 
that we already get right now through SourceManager.

That leaves us with other ways of canonicalization: either through conversions 
to the native path or `FileManager::getCanonicalName()`. Both are expensive and 
I think the problem is that though the mapping here would be OK to generate in 
an expensive manner, the callsites would not be very happy with that but I 
guess it's acceptable.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D123031/new/

https://reviews.llvm.org/D123031

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

Reply via email to