[VFS] Skip non existent files from the VFS tree
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 12 Aug 2016 01:51:04 +0000 (01:51 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 12 Aug 2016 01:51:04 +0000 (01:51 +0000)
commit1dc8a422812cdbc23edbf4856a49a2e15d3cc591
tree5ccf2c9dee75aa7f8485f9170860e4514d2a0dc7
parentb40d8ad225a376d8032b261963113242a8d8102f
[VFS] Skip non existent files from the VFS tree

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

llvm-svn: 278457
clang/lib/Basic/VirtualFileSystem.cpp
clang/test/VFS/Inputs/Bar.framework/Headers/A.h [new file with mode: 0644]
clang/test/VFS/Inputs/Bar.framework/Headers/B.h [new file with mode: 0644]
clang/test/VFS/Inputs/Bar.framework/Headers/C.h [new file with mode: 0644]
clang/test/VFS/Inputs/Bar.framework/Modules/module.modulemap [new file with mode: 0644]
clang/test/VFS/Inputs/bar-headers.yaml [new file with mode: 0644]
clang/test/VFS/umbrella-framework-import-skipnonexist.m [new file with mode: 0644]