[PATCH] D117937: [VFS] Add a "redirecting-with" field to overlays

Ben Barham via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Fri Jan 21 16:53:39 PST 2022


bnbarham created this revision.
bnbarham added reviewers: akyrtzi, dexonsmith, keith, JDevlieghere.
Herald added a subscriber: hiraditya.
bnbarham requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Extend "fallthrough" to allow a third option: "fallback". Fallthrough
allows the original path to used if the redirected (or mapped) path
fails. Fallback is the reverse of this, ie. use the original path and
fallback to the mapped path otherwise.

While this result *can* be achieved today using multiple overlays, this
adds a much more intuitive option. As an example, take two directories
"A" and "B". We would like files from "A" to be used, unless they don't
exist, in which case the VFS should fallback to those in "B".

With the current fallthrough option this is possible by adding two
overlays: one mapping from A -> B and another mapping from B -> A. Since
the frontend *nests* the two `RedirectingFileSystems`, the result will
be that "A" is mapped to "B" and back to "A", unless it isn't in "A" in
which case it fallsthrough to "B" (or fails if it exists in neither).

Using "fallback" semantics allows a single overlay instead: one mapping
from "A" to "B" but only using that mapping if the operation in "A"
fails first.

"redirect-only" is used to represent the current "fallthrough: false"
case.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D117937

Files:
  clang/test/VFS/fallback.c
  llvm/include/llvm/Support/VirtualFileSystem.h
  llvm/lib/Support/VirtualFileSystem.cpp
  llvm/unittests/Support/VirtualFileSystemTest.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117937.402137.patch
Type: text/x-patch
Size: 28438 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20220122/b899b041/attachment-0001.bin>


More information about the cfe-commits mailing list