Reapply [VFS] Skip non existent files from the VFS tree
Reapply r278457 with test fixed to not abouse fs case sensitivity. When the VFS uses a YAML file, the real file path for a virtual file is described in the "external-contents" field. Example: ... { 'type': 'file', 'name': 'a.h', 'external-contents': '/a/b/c/a.h' } Currently, when parsing umbrella directories, we use vfs::recursive_directory_iterator to gather the header files to generate the equivalent modules for. If the external contents for a header does not exist, we currently are unable to build a module, since the VFS vfs::recursive_directory_iterator will fail when it finds an entry without a reliable real path. Since the YAML file could be prepared ahead of time and shared among different compiler invocations, an entry might not yet have a reliable path in 'external-contents', breaking the iteration. Give the VFS the capability to skip such entries whenever 'ignore-non-existent-contents' property is set in the YAML file. rdar://problem/27531549 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@278543 91177308-0d34-0410-b5e6-96231b3b80d8
Showing
- lib/Basic/VirtualFileSystem.cpp 26 additions, 8 deletionslib/Basic/VirtualFileSystem.cpp
- test/VFS/Inputs/Bar.framework/Headers/A.h 1 addition, 0 deletionstest/VFS/Inputs/Bar.framework/Headers/A.h
- test/VFS/Inputs/Bar.framework/Headers/B.h 1 addition, 0 deletionstest/VFS/Inputs/Bar.framework/Headers/B.h
- test/VFS/Inputs/Bar.framework/Headers/C.h 1 addition, 0 deletionstest/VFS/Inputs/Bar.framework/Headers/C.h
- test/VFS/Inputs/Bar.framework/Modules/module.modulemap 6 additions, 0 deletionstest/VFS/Inputs/Bar.framework/Modules/module.modulemap
- test/VFS/Inputs/bar-headers.yaml 39 additions, 0 deletionstest/VFS/Inputs/bar-headers.yaml
- test/VFS/umbrella-framework-import-skipnonexist.m 14 additions, 0 deletionstest/VFS/umbrella-framework-import-skipnonexist.m
Loading
Please register or sign in to comment