Reapply [VFS] Skip non existent files from the VFS tree
authorBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 12 Aug 2016 18:18:24 +0000 (18:18 +0000)
committerBruno Cardoso Lopes <bruno.cardoso@gmail.com>
Fri, 12 Aug 2016 18:18:24 +0000 (18:18 +0000)
commitb7abde0343e1042fec643faca571882e3fc133b7
treee25c261c4192e0bd8cd046c3a854dbf9e5110575
parentb1669ba1ed4f7476addc0ac9f18c4f3369aa9056
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

llvm-svn: 278543
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]