r202176 - Add a driver option -ivfsoverlay

Ben Langmuir blangmuir at apple.com
Tue Mar 4 10:24:53 PST 2014


On Mar 3, 2014, at 5:26 PM, Daniel Dunbar <daniel at zuster.org> wrote:

> On Mon, Mar 3, 2014 at 3:57 PM, Ben Langmuir <blangmuir at apple.com> wrote:
> 
> On Mar 3, 2014, at 3:18 PM, Daniel Dunbar <daniel at zuster.org> wrote:
> 
>> I wonder if '-ivfsoverlay' is the right name for this? I have two nits:
> 
> It’s probably not :).
> 
>> 1. If we ever added non-overlay operations into the format, it would be a misnomer.
> 
> To be clear, there are two orthogonal kinds of file system relationship here.
> 1. Overlaying: merging the contents of two (or more) file systems so that directories contain the union of their contents in each of the merged file systems, and if multiple file systems contain the same file, the ‘upper’ one wins.
> 2. Mapping: files described in the vfs file have contents provided by a file on a different (‘external’) file system.
> 
> Only (2) is exposed in the vfs files themselves, so I think the option name has to say how the file is going to effect the overall filesystem.
> 
>> 2. While the implementation of the option requires using the VFS, the name is loaded enough that I think it might be good to call it something more related to its function (like c-index-test's '-remap-file', or "header maps"). I don't have a suggestion I am in love with though, the best alternative I can think of at the moment is '-ifsmap' (or '-ifs-map', or maybe just '-iremap' since the -i already indicates it is include path specific).
> 
> If we want to ever support fully virtual files with this option, anything with ‘map’ in the name is suspicious.  Actually, I think using the ‘i’ prefix is probably wrong, since not only include paths are affected.  Hmm…
> 
> I wondered about that as well, the existing -i landscape is pretty disastrous (-I,-F,-iquote,-isysroot,-iprefix,-iwithprefix,..). This also might be confusing given that header maps work as objects specified with '-i'-like options, but the effect is completely different.
> 
> That combined with your previous remarks maybe argues for something along the lines of "-ffs-model <model definition>' (I don't particularly like model, but didn't want to use 'spec' for confusion with GCC "specs”)?

Neither of these suggests (to me) what the compiler is doing with the filesystem, and I would probably assume it was replacing the ‘real’ file system rather than overlaying it.

General question about f_group: is there any precedent for having -f<name> foo -f<name> bar combine both foo and bar, rather than just taking the last one?

Ben

> 
>  - Daniel
> 
> 
> Ben
>> 
>>  - Daniel
>> 
>> 
>> On Tue, Feb 25, 2014 at 10:23 AM, Ben Langmuir <blangmuir at apple.com> wrote:
>> Author: benlangmuir
>> Date: Tue Feb 25 12:23:47 2014
>> New Revision: 202176
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=202176&view=rev
>> Log:
>> Add a driver option -ivfsoverlay
>> 
>> Reads the description of a virtual filesystem from a file and overlays
>> it over the real file system.
>> 
>> Added:
>>     cfe/trunk/test/Driver/vfsoverlay.c
>>     cfe/trunk/test/VFS/
>>     cfe/trunk/test/VFS/Inputs/
>>     cfe/trunk/test/VFS/Inputs/actual_header.h
>>     cfe/trunk/test/VFS/Inputs/actual_module.map
>>     cfe/trunk/test/VFS/Inputs/include_real.h
>>     cfe/trunk/test/VFS/Inputs/invalid-yaml.yaml
>>     cfe/trunk/test/VFS/Inputs/missing-key.yaml
>>     cfe/trunk/test/VFS/Inputs/public_header.h
>>     cfe/trunk/test/VFS/Inputs/unknown-key.yaml
>>     cfe/trunk/test/VFS/Inputs/unknown-value.yaml
>>     cfe/trunk/test/VFS/Inputs/vfsoverlay.yaml
>>     cfe/trunk/test/VFS/framework-import.m
>>     cfe/trunk/test/VFS/implicit-include.c
>>     cfe/trunk/test/VFS/include-mixed-real-and-virtual.c
>>     cfe/trunk/test/VFS/include-real-from-virtual.c
>>     cfe/trunk/test/VFS/include-virtual-from-real.c
>>     cfe/trunk/test/VFS/include.c
>>     cfe/trunk/test/VFS/module-import.m
>>     cfe/trunk/test/VFS/parse-errors.c
>> Modified:
>>     cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td
>>     cfe/trunk/include/clang/Driver/Options.td
>>     cfe/trunk/include/clang/Lex/HeaderSearchOptions.h
>>     cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>>     cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>>     cfe/trunk/lib/Frontend/FrontendAction.cpp
>> 
>> Modified: cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td (original)
>> +++ cfe/trunk/include/clang/Basic/DiagnosticFrontendKinds.td Tue Feb 25 12:23:47 2014
>> @@ -158,4 +158,9 @@ def warn_module_config_macro_undef : War
>>    InGroup<ConfigMacros>;
>>  def note_module_def_undef_here : Note<
>>    "macro was %select{defined|#undef'd}0 here">;
>> +
>> +def err_missing_vfs_overlay_file : Error<
>> +  "virtual filesystem overlay file '%0' not found">, DefaultFatal;
>> +def err_invalid_vfs_overlay : Error<
>> +  "invalid virtual filesystem overlay file '%0'">, DefaultFatal;
>>  }
>> 
>> Modified: cfe/trunk/include/clang/Driver/Options.td
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Driver/Options.td (original)
>> +++ cfe/trunk/include/clang/Driver/Options.td Tue Feb 25 12:23:47 2014
>> @@ -966,6 +966,8 @@ def iwithsysroot : JoinedOrSeparate<["-"
>>    HelpText<"Add directory to SYSTEM include search path, "
>>             "absolute paths are relative to -isysroot">, MetaVarName<"<directory>">,
>>    Flags<[CC1Option]>;
>> +def ivfsoverlay : JoinedOrSeparate<["-"], "ivfsoverlay">, Group<clang_i_Group>, Flags<[CC1Option]>,
>> +  HelpText<"Overlay the virtual filesystem described by file over the real file system">;
>>  def i : Joined<["-"], "i">, Group<i_Group>;
>>  def keep__private__externs : Flag<["-"], "keep_private_externs">;
>>  def l : JoinedOrSeparate<["-"], "l">, Flags<[LinkerInput, RenderJoined]>;
>> 
>> Modified: cfe/trunk/include/clang/Lex/HeaderSearchOptions.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/HeaderSearchOptions.h?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/include/clang/Lex/HeaderSearchOptions.h (original)
>> +++ cfe/trunk/include/clang/Lex/HeaderSearchOptions.h Tue Feb 25 12:23:47 2014
>> @@ -129,6 +129,9 @@ public:
>>    /// \brief The set of user-provided module-map-files.
>>    llvm::SetVector<std::string> ModuleMapFiles;
>> 
>> +  /// \brief The set of user-provided virtual filesystem overlay files.
>> +  std::vector<std::string> VFSOverlayFiles;
>> +
>>    /// Include the compiler builtin includes.
>>    unsigned UseBuiltinIncludes : 1;
>> 
>> @@ -172,6 +175,10 @@ public:
>>    void AddSystemHeaderPrefix(StringRef Prefix, bool IsSystemHeader) {
>>      SystemHeaderPrefixes.push_back(SystemHeaderPrefix(Prefix, IsSystemHeader));
>>    }
>> +
>> +  void AddVFSOverlayFile(StringRef Name) {
>> +    VFSOverlayFiles.push_back(Name);
>> +  }
>>  };
>> 
>>  } // end namespace clang
>> 
>> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original)
>> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Tue Feb 25 12:23:47 2014
>> @@ -761,7 +761,7 @@ error_code VFSFromYAML::openFileForRead(
>>    if (!F) // FIXME: errc::not_a_file?
>>      return error_code(errc::invalid_argument, system_category());
>> 
>> -  return ExternalFS->openFileForRead(Path, Result);
>> +  return ExternalFS->openFileForRead(F->getExternalContentsPath(), Result);
>>  }
>> 
>>  IntrusiveRefCntPtr<FileSystem>
>> 
>> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
>> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Tue Feb 25 12:23:47 2014
>> @@ -1020,6 +1020,10 @@ static void ParseHeaderSearchArgs(Header
>>         I != E; ++I)
>>      Opts.AddSystemHeaderPrefix((*I)->getValue(),
>>                                 (*I)->getOption().matches(OPT_isystem_prefix));
>> +
>> +  for (arg_iterator I = Args.filtered_begin(OPT_ivfsoverlay),
>> +       E = Args.filtered_end(); I != E; ++I)
>> +    Opts.AddVFSOverlayFile((*I)->getValue());
>>  }
>> 
>>  void CompilerInvocation::setLangDefaults(LangOptions &Opts, InputKind IK,
>> 
>> Modified: cfe/trunk/lib/Frontend/FrontendAction.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/FrontendAction.cpp?rev=202176&r1=202175&r2=202176&view=diff
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/FrontendAction.cpp (original)
>> +++ cfe/trunk/lib/Frontend/FrontendAction.cpp Tue Feb 25 12:23:47 2014
>> @@ -211,6 +211,32 @@ bool FrontendAction::BeginSourceFile(Com
>>      return true;
>>    }
>> 
>> +  if (!CI.getHeaderSearchOpts().VFSOverlayFiles.empty()) {
>> +    IntrusiveRefCntPtr<vfs::OverlayFileSystem>
>> +        Overlay(new vfs::OverlayFileSystem(vfs::getRealFileSystem()));
>> +    // earlier vfs files are on the bottom
>> +    const std::vector<std::string> &Files =
>> +        CI.getHeaderSearchOpts().VFSOverlayFiles;
>> +    for (std::vector<std::string>::const_iterator I = Files.begin(),
>> +                                                  E = Files.end();
>> +         I != E; ++I) {
>> +      OwningPtr<llvm::MemoryBuffer> Buffer;
>> +      if (llvm::errc::success != llvm::MemoryBuffer::getFile(*I, Buffer)) {
>> +        CI.getDiagnostics().Report(diag::err_missing_vfs_overlay_file) << *I;
>> +        goto failure;
>> +      }
>> +
>> +      IntrusiveRefCntPtr<vfs::FileSystem> FS =
>> +          vfs::getVFSFromYAML(Buffer.take(), /*DiagHandler*/0);
>> +      if (!FS.getPtr()) {
>> +        CI.getDiagnostics().Report(diag::err_invalid_vfs_overlay) << *I;
>> +        goto failure;
>> +      }
>> +      Overlay->pushOverlay(FS);
>> +    }
>> +    CI.setVirtualFileSystem(Overlay);
>> +  }
>> +
>>    // Set up the file and source managers, if needed.
>>    if (!CI.hasFileManager())
>>      CI.createFileManager();
>> 
>> Added: cfe/trunk/test/Driver/vfsoverlay.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/vfsoverlay.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/Driver/vfsoverlay.c (added)
>> +++ cfe/trunk/test/Driver/vfsoverlay.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,5 @@
>> +// RUN: %clang -ivfsoverlay foo.h -### %s 2>&1 | FileCheck %s
>> +// CHECK: "-ivfsoverlay" "foo.h"
>> +
>> +// RUN: not %clang -ivfsoverlay foo.h %s 2>&1 | FileCheck -check-prefix=CHECK-MISSING %s
>> +// CHECK-MISSING: virtual filesystem overlay file 'foo.h' not found
>> 
>> Added: cfe/trunk/test/VFS/Inputs/actual_header.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/actual_header.h?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/actual_header.h (added)
>> +++ cfe/trunk/test/VFS/Inputs/actual_header.h Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1 @@
>> +void bar(void);
>> 
>> Added: cfe/trunk/test/VFS/Inputs/actual_module.map
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/actual_module.map?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/actual_module.map (added)
>> +++ cfe/trunk/test/VFS/Inputs/actual_module.map Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,4 @@
>> +module not_real {
>> +  header "not_real.h"
>> +  export *
>> +}
>> 
>> Added: cfe/trunk/test/VFS/Inputs/include_real.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/include_real.h?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/include_real.h (added)
>> +++ cfe/trunk/test/VFS/Inputs/include_real.h Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1 @@
>> +#include "real.h"
>> 
>> Added: cfe/trunk/test/VFS/Inputs/invalid-yaml.yaml
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/invalid-yaml.yaml?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/invalid-yaml.yaml (added)
>> +++ cfe/trunk/test/VFS/Inputs/invalid-yaml.yaml Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,4 @@
>> +{
>> +  'version': 0,
>> +  'roots': []
>> +]
>> 
>> Added: cfe/trunk/test/VFS/Inputs/missing-key.yaml
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/missing-key.yaml?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/missing-key.yaml (added)
>> +++ cfe/trunk/test/VFS/Inputs/missing-key.yaml Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,4 @@
>> +{
>> +  'version': 0,
>> +  'roots': [ { 'name' : 'foo', 'external-contents': 'bar' } ]
>> +}
>> 
>> Added: cfe/trunk/test/VFS/Inputs/public_header.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/public_header.h?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/public_header.h (added)
>> +++ cfe/trunk/test/VFS/Inputs/public_header.h Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1 @@
>> +void from_framework(void);
>> 
>> Added: cfe/trunk/test/VFS/Inputs/unknown-key.yaml
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/unknown-key.yaml?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/unknown-key.yaml (added)
>> +++ cfe/trunk/test/VFS/Inputs/unknown-key.yaml Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,5 @@
>> +{
>> +  'version': 0,
>> +  'unknown-key': 'value',
>> +  'roots': []
>> +}
>> 
>> Added: cfe/trunk/test/VFS/Inputs/unknown-value.yaml
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/unknown-value.yaml?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/unknown-value.yaml (added)
>> +++ cfe/trunk/test/VFS/Inputs/unknown-value.yaml Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,5 @@
>> +{
>> +  'version': 0,
>> +  'case-sensitive': 'Maybe?',
>> +  'roots': []
>> +}
>> 
>> Added: cfe/trunk/test/VFS/Inputs/vfsoverlay.yaml
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/Inputs/vfsoverlay.yaml?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/Inputs/vfsoverlay.yaml (added)
>> +++ cfe/trunk/test/VFS/Inputs/vfsoverlay.yaml Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,21 @@
>> +{
>> +  'version': 0,
>> +  'roots': [
>> +    { 'name': 'OUT_DIR', 'type': 'directory',
>> +      'contents': [
>> +        { 'name': 'not_real.h', 'type': 'file',
>> +          'external-contents': 'INPUT_DIR/actual_header.h'
>> +        },
>> +        { 'name': 'module.map', 'type': 'file',
>> +          'external-contents': 'INPUT_DIR/actual_module.map'
>> +        },
>> +        { 'name': 'include_real.h', 'type': 'file',
>> +          'external-contents': 'INPUT_DIR/include_real.h'
>> +        },
>> +        { 'name': 'SomeFramework.framework/Headers/public_header.h', 'type': 'file',
>> +          'external-contents': 'INPUT_DIR/public_header.h'
>> +        }
>> +      ]
>> +    }
>> +  ]
>> +}
>> 
>> Added: cfe/trunk/test/VFS/framework-import.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/framework-import.m?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/framework-import.m (added)
>> +++ cfe/trunk/test/VFS/framework-import.m Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,9 @@
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -F %t -ivfsoverlay %t.yaml -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +#import <SomeFramework/public_header.h>
>> +
>> +void foo() {
>> +  from_framework();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/implicit-include.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/implicit-include.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/implicit-include.c (added)
>> +++ cfe/trunk/test/VFS/implicit-include.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,7 @@
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -include "not_real.h" -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +void foo() {
>> +  bar();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/include-mixed-real-and-virtual.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/include-mixed-real-and-virtual.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/include-mixed-real-and-virtual.c (added)
>> +++ cfe/trunk/test/VFS/include-mixed-real-and-virtual.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,14 @@
>> +// RUN: rm -rf %t
>> +// RUN: mkdir -p %t
>> +// RUN: echo "void baz(void);" > %t/real.h
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +#include "not_real.h"
>> +#include "real.h"
>> +
>> +void foo() {
>> +  bar();
>> +  baz();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/include-real-from-virtual.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/include-real-from-virtual.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/include-real-from-virtual.c (added)
>> +++ cfe/trunk/test/VFS/include-real-from-virtual.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,12 @@
>> +// RUN: rm -rf %t
>> +// RUN: mkdir -p %t
>> +// RUN: echo "void baz(void);" > %t/real.h
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +#include "include_real.h"
>> +
>> +void foo() {
>> +  baz();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/include-virtual-from-real.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/include-virtual-from-real.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/include-virtual-from-real.c (added)
>> +++ cfe/trunk/test/VFS/include-virtual-from-real.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,12 @@
>> +// RUN: rm -rf %t
>> +// RUN: mkdir -p %t
>> +// RUN: echo '#include "not_real.h"' > %t/include_not_real.h
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -ivfsoverlay %t.yaml -I %t -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +#include "include_not_real.h"
>> +
>> +void foo() {
>> +  bar();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/include.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/include.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/include.c (added)
>> +++ cfe/trunk/test/VFS/include.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,9 @@
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -I %t -ivfsoverlay %t.yaml -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> +#include "not_real.h"
>> +
>> +void foo() {
>> +  bar();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/module-import.m
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/module-import.m?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/module-import.m (added)
>> +++ cfe/trunk/test/VFS/module-import.m Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,9 @@
>> +// RUN: sed -e "s:INPUT_DIR:%S/Inputs:g" -e "s:OUT_DIR:%t:g" %S/Inputs/vfsoverlay.yaml > %t.yaml
>> +// RUN: %clang_cc1 -Werror -fmodules -fmodules-cache-path=%t -ivfsoverlay %t.yaml -I %t -fsyntax-only %s
>> +// REQUIRES: shell
>> +
>> + at import not_real;
>> +
>> +void foo() {
>> +  bar();
>> +}
>> 
>> Added: cfe/trunk/test/VFS/parse-errors.c
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/VFS/parse-errors.c?rev=202176&view=auto
>> ==============================================================================
>> --- cfe/trunk/test/VFS/parse-errors.c (added)
>> +++ cfe/trunk/test/VFS/parse-errors.c Tue Feb 25 12:23:47 2014
>> @@ -0,0 +1,14 @@
>> +// RUN: not %clang_cc1 -ivfsoverlay %S/Inputs/invalid-yaml.yaml -fsyntax-only %s 2>&1 | FileCheck %s
>> +// CHECK: invalid virtual filesystem overlay file
>> +
>> +// RUN: not %clang_cc1 -ivfsoverlay %S/Inputs/missing-key.yaml -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-MISSING-TYPE %s
>> +// CHECK-MISSING-TYPE: missing key 'type'
>> +// CHECK-MISSING-TYPE: invalid virtual filesystem overlay file
>> +
>> +// RUN: not %clang_cc1 -ivfsoverlay %S/Inputs/unknown-key.yaml -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-UNKNOWN-KEY %s
>> +// CHECK-UNKNOWN-KEY: unknown key
>> +// CHECK-UNKNOWN-KEY: invalid virtual filesystem overlay file
>> +
>> +// RUN: not %clang_cc1 -ivfsoverlay %S/Inputs/unknown-value.yaml -fsyntax-only %s 2>&1 | FileCheck -check-prefix=CHECK-UNKNOWN-VALUE %s
>> +// CHECK-UNKNOWN-VALUE: expected boolean value
>> +// CHECK-UNKNOWN-VALUE: invalid virtual filesystem overlay file
>> 
>> 
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>> 
> 
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140304/a5058524/attachment.html>


More information about the cfe-commits mailing list