[PATCH] D50926: [SourceManager] Extract 'findFileIDsForFile' from 'translateFile' to allow mapping from one file entry to multiple FileIDs

Alex Lorenz via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Mon Sep 10 12:59:41 PDT 2018


arphaman added inline comments.


================
Comment at: lib/Basic/SourceManager.cpp:1626
+    if (FileContentCache->OrigEntry == SourceFile) {
+      if (Callback(FileID::get(I)))
+        return true;
----------------
ioeric wrote:
> Should we check `FileID::get(I)` is valid?
That's not really necessary. The FileID we get should be valid as a local SLoc entry should have a corresponding FileID. The SLoc 0 is not a File loc entry so we can never get FileID::get(0) here.


================
Comment at: lib/Basic/SourceManager.cpp:1628
+        return true;
+    } else if (LookForFilesystemUpdates &&
+               (SourceFileName || (SourceFileName = llvm::sys::path::filename(
----------------
ioeric wrote:
> ioeric wrote:
> > The conditions here are pretty hard to follow and reason about. Could we maybe split them (some documentation would also help)?
> In the original version, file system updates are checked last (after modules). Any reason to move it before modules? 
> 
> Also, it seems that this code path could also be run when `FileID`above is invalid? So I wonder whether `else if` is correct here.
I just realized that the original file system code has never been executed and was just dead code! If we take a look at this logic:

```
for (unsigned I = 0, N = local_sloc_entry_size(); I != N; ++I) {
    FileID IFileID;
    IFileID.ID = I;
    const SLocEntry &SLoc = getSLocEntry(IFileID, &Invalid);
    if (Invalid)
      return false;
```

You'll notice that the loop starts iterating at `0`. Get SLocEntry is called with FileID `0`, which sets the `Invalid` flag to true. Then we simply return, so the loop never reached the code below. Looks like it's a regression that happened years ago. I removed this code for now, but I'll reinstate it correctly in a follow-up patch.



Repository:
  rC Clang

https://reviews.llvm.org/D50926





More information about the cfe-commits mailing list