[PATCH] D37474: [PCH] Allow VFS to be used for tests that generate PCH files

Ilya Biryukov via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Sep 8 05:17:44 PDT 2017


ilya-biryukov added a comment.

In https://reviews.llvm.org/D37474#863335, @cameron314 wrote:

> Looking at the way remapped buffers are handled, I just remembered that they must exist on the file system (at the very least, in a directory that exists) or the remapping is not taken into account. So that pretty much rules out the other approach, I think.


You are right, thanks for pointing this out. Fiddling with `VFS` seems like an only option.



================
Comment at: lib/Frontend/ASTUnit.cpp:1014
+/// with another virtual file system.
+class PCHOverlayFileSystem : public vfs::FileSystem
+{
----------------
Maybe create a combination of `InMemoryFileSystem` and `OverlayFileSystem` instead of custom filtering implementation?
We really need to read only a single file given that `ASTUnit` never creates directory PCHs.
I bet it would make the code simpler and less error-prone.


================
Comment at: lib/Frontend/ASTUnit.cpp:1090
+  IntrusiveRefCntPtr<vfs::FileSystem> RealFS = vfs::getRealFileSystem();
+  if (OverrideMainBuffer && VFS && RealFS && VFS != RealFS) {
+    // We have a slight inconsistency here -- we're using the VFS to
----------------
Maybe create a PCH overlay only when `!VFS->exists(/*PreamblePath...*/)`?
This seems like a good enough indication that `RealFS` is underneath the `vfs::FileSystem` instance, even if pointer equality does not hold (i.e. in case of overlays over `RealFS`).


================
Comment at: unittests/Frontend/CMakeLists.txt:9
   CodeGenActionTest.cpp
+  PchPreambleTest.cpp
   )
----------------
Maybe rename to `PCHPreambleTest`?
LLVM code generally capitalizes all letters in abbreviations.


https://reviews.llvm.org/D37474





More information about the cfe-commits mailing list