r261552 - [VFS] Add 'overlay-relative' field to YAML files
Bruno Cardoso Lopes via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 22 18:48:28 PST 2016
Hi Sean,
This is hopefully fixed in r261556.
On Mon, Feb 22, 2016 at 5:45 PM, Sean Silva <chisophugis at gmail.com> wrote:
> This or r261551 seem to be causing a build failure:
> http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/527
>
> -- Sean SIlva
>
> On Mon, Feb 22, 2016 at 10:41 AM, Bruno Cardoso Lopes via cfe-commits
> <cfe-commits at lists.llvm.org> wrote:
>>
>> Author: bruno
>> Date: Mon Feb 22 12:41:09 2016
>> New Revision: 261552
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=261552&view=rev
>> Log:
>> [VFS] Add 'overlay-relative' field to YAML files
>>
>> The VFS overlay mapping between virtual paths and real paths is done
>> through
>> the 'external-contents' entries in YAML files, which contains hardcoded
>> paths
>> to the real files.
>>
>> When a module compilation crashes, headers are dumped into
>> <name>.cache/vfs
>> directory and are mapped via the <name>.cache/vfs/vfs.yaml. The script
>> generated for reproduction uses -ivfsoverlay pointing to file to gather
>> the
>> mapping between virtual paths and files inside <name>.cache/vfs.
>> Currently, we
>> are only capable of reproducing such crashes in the same machine as they
>> happen, because of the hardcoded paths in 'external-contents'.
>>
>> To be able to reproduce a crash in another machine, this patch introduces
>> a new
>> option in the VFS yaml file called 'overlay-relative'. When it's equal to
>> 'true' it means that the provided path to the YAML file through the
>> -ivfsoverlay option should also be used to prefix the final path for every
>> 'external-contents'.
>>
>> Example, given the invocation snippet "... -ivfsoverlay
>> <name>.cache/vfs/vfs.yaml" and the following entry in the yaml file:
>>
>> "overlay-relative": "true",
>> "roots": [
>> ...
>> "type": "directory",
>> "name": "/usr/include",
>> "contents": [
>> {
>> "type": "file",
>> "name": "stdio.h",
>> "external-contents": "/usr/include/stdio.h"
>> },
>> ...
>>
>> Here, a file manager request for virtual "/usr/include/stdio.h", that will
>> map
>> into real path "/<absolute_path_to>/<name>.cache/vfs/usr/include/stdio.h.
>>
>> This is a useful feature for debugging module crashes in machines other
>> than
>> the one where the error happened.
>>
>> Differential Revision: http://reviews.llvm.org/D17457
>>
>> rdar://problem/24499339
>>
>> Added:
>> cfe/trunk/test/Modules/crash-vfs-relative-overlay.m
>> - copied, changed from r261551,
>> cfe/trunk/test/Modules/crash-vfs-path-traversal.m
>> Modified:
>> cfe/trunk/include/clang/Basic/VirtualFileSystem.h
>> cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>> cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
>> cfe/trunk/test/Modules/crash-vfs-path-symlink-component.m
>> cfe/trunk/test/Modules/crash-vfs-path-traversal.m
>>
>> Modified: cfe/trunk/include/clang/Basic/VirtualFileSystem.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/VirtualFileSystem.h?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/include/clang/Basic/VirtualFileSystem.h (original)
>> +++ cfe/trunk/include/clang/Basic/VirtualFileSystem.h Mon Feb 22 12:41:09
>> 2016
>> @@ -310,6 +310,7 @@ llvm::sys::fs::UniqueID getNextVirtualUn
>> IntrusiveRefCntPtr<FileSystem>
>> getVFSFromYAML(std::unique_ptr<llvm::MemoryBuffer> Buffer,
>> llvm::SourceMgr::DiagHandlerTy DiagHandler,
>> + StringRef YAMLFilePath,
>> void *DiagContext = nullptr,
>> IntrusiveRefCntPtr<FileSystem> ExternalFS =
>> getRealFileSystem());
>>
>> @@ -323,6 +324,8 @@ struct YAMLVFSEntry {
>> class YAMLVFSWriter {
>> std::vector<YAMLVFSEntry> Mappings;
>> Optional<bool> IsCaseSensitive;
>> + Optional<bool> IsOverlayRelative;
>> + std::string OverlayDir;
>>
>> public:
>> YAMLVFSWriter() {}
>> @@ -330,6 +333,11 @@ public:
>> void setCaseSensitivity(bool CaseSensitive) {
>> IsCaseSensitive = CaseSensitive;
>> }
>> + void setOverlayDir(StringRef OverlayDirectory) {
>> + IsOverlayRelative = true;
>> + OverlayDir.assign(OverlayDirectory.str());
>> + }
>> +
>> void write(llvm::raw_ostream &OS);
>> };
>>
>>
>> Modified: cfe/trunk/lib/Basic/VirtualFileSystem.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/VirtualFileSystem.cpp?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Basic/VirtualFileSystem.cpp (original)
>> +++ cfe/trunk/lib/Basic/VirtualFileSystem.cpp Mon Feb 22 12:41:09 2016
>> @@ -790,6 +790,7 @@ public:
>> /// All configuration options are optional.
>> /// 'case-sensitive': <boolean, default=true>
>> /// 'use-external-names': <boolean, default=true>
>> +/// 'overlay-relative': <boolean, default=false>
>> ///
>> /// Virtual directories are represented as
>> /// \verbatim
>> @@ -832,6 +833,10 @@ class RedirectingFileSystem : public vfs
>> std::vector<std::unique_ptr<Entry>> Roots;
>> /// \brief The file system to use for external references.
>> IntrusiveRefCntPtr<FileSystem> ExternalFS;
>> + /// If IsRelativeOverlay is set, this represents the directory
>> + /// path that should be prefixed to each 'external-contents' entry
>> + /// when reading from YAML files.
>> + std::string ExternalContentsPrefixDir;
>>
>> /// @name Configuration
>> /// @{
>> @@ -841,6 +846,10 @@ class RedirectingFileSystem : public vfs
>> /// Currently, case-insensitive matching only works correctly with
>> ASCII.
>> bool CaseSensitive;
>>
>> + /// IsRelativeOverlay marks whether a IsExternalContentsPrefixDir path
>> must
>> + /// be prefixed in every 'external-contents' when reading from YAML
>> files.
>> + bool IsRelativeOverlay = false;
>> +
>> /// \brief Whether to use to use the value of 'external-contents' for
>> the
>> /// names of files. This global value is overridable on a per-file
>> basis.
>> bool UseExternalNames;
>> @@ -868,8 +877,8 @@ public:
>> /// returns a virtual file system representing its contents.
>> static RedirectingFileSystem *
>> create(std::unique_ptr<MemoryBuffer> Buffer,
>> - SourceMgr::DiagHandlerTy DiagHandler, void *DiagContext,
>> - IntrusiveRefCntPtr<FileSystem> ExternalFS);
>> + SourceMgr::DiagHandlerTy DiagHandler, StringRef YAMLFilePath,
>> + void *DiagContext, IntrusiveRefCntPtr<FileSystem> ExternalFS);
>>
>> ErrorOr<Status> status(const Twine &Path) override;
>> ErrorOr<std::unique_ptr<File>> openFileForRead(const Twine &Path)
>> override;
>> @@ -902,6 +911,15 @@ public:
>> return
>> directory_iterator(std::make_shared<VFSFromYamlDirIterImpl>(Dir,
>> *this, D->contents_begin(), D->contents_end(), EC));
>> }
>> +
>> + void setExternalContentsPrefixDir(StringRef PrefixDir) {
>> + ExternalContentsPrefixDir = PrefixDir.str();
>> + }
>> +
>> + StringRef getExternalContentsPrefixDir() const {
>> + return ExternalContentsPrefixDir;
>> + }
>> +
>> };
>>
>> /// \brief A helper class to hold the common YAML parsing state.
>> @@ -981,7 +999,7 @@ class RedirectingFileSystemParser {
>> return true;
>> }
>>
>> - std::unique_ptr<Entry> parseEntry(yaml::Node *N) {
>> + std::unique_ptr<Entry> parseEntry(yaml::Node *N, RedirectingFileSystem
>> *FS) {
>> yaml::MappingNode *M = dyn_cast<yaml::MappingNode>(N);
>> if (!M) {
>> error(N, "expected mapping node for file or directory entry");
>> @@ -1057,7 +1075,7 @@ class RedirectingFileSystemParser {
>> for (yaml::SequenceNode::iterator I = Contents->begin(),
>> E = Contents->end();
>> I != E; ++I) {
>> - if (std::unique_ptr<Entry> E = parseEntry(&*I))
>> + if (std::unique_ptr<Entry> E = parseEntry(&*I, FS))
>> EntryArrayContents.push_back(std::move(E));
>> else
>> return nullptr;
>> @@ -1071,12 +1089,22 @@ class RedirectingFileSystemParser {
>> HasContents = true;
>> if (!parseScalarString(I->getValue(), Value, Buffer))
>> return nullptr;
>> - SmallString<256> Path(Value);
>> +
>> + SmallString<128> FullPath;
>> + if (FS->IsRelativeOverlay) {
>> + FullPath = FS->getExternalContentsPrefixDir();
>> + assert(!FullPath.empty() &&
>> + "External contents prefix directory must exist");
>> + llvm::sys::path::append(FullPath, Value);
>> + } else {
>> + FullPath = Value;
>> + }
>> +
>> // Guarantee that old YAML files containing paths with ".." and
>> "." are
>> // properly canonicalized before read into the VFS.
>> - Path = sys::path::remove_leading_dotslash(Path);
>> - sys::path::remove_dots(Path, /*remove_dot_dot=*/true);
>> - ExternalContentsPath = Path.str();
>> + FullPath = sys::path::remove_leading_dotslash(FullPath);
>> + sys::path::remove_dots(FullPath, /*remove_dot_dot=*/true);
>> + ExternalContentsPath = FullPath.str();
>> } else if (Key == "use-external-name") {
>> bool Val;
>> if (!parseScalarBool(I->getValue(), Val))
>> @@ -1162,6 +1190,7 @@ public:
>> KeyStatusPair("version", true),
>> KeyStatusPair("case-sensitive", false),
>> KeyStatusPair("use-external-names", false),
>> + KeyStatusPair("overlay-relative", false),
>> KeyStatusPair("roots", true),
>> };
>>
>> @@ -1187,7 +1216,7 @@ public:
>>
>> for (yaml::SequenceNode::iterator I = Roots->begin(), E =
>> Roots->end();
>> I != E; ++I) {
>> - if (std::unique_ptr<Entry> E = parseEntry(&*I))
>> + if (std::unique_ptr<Entry> E = parseEntry(&*I, FS))
>> FS->Roots.push_back(std::move(E));
>> else
>> return false;
>> @@ -1213,6 +1242,9 @@ public:
>> } else if (Key == "case-sensitive") {
>> if (!parseScalarBool(I->getValue(), FS->CaseSensitive))
>> return false;
>> + } else if (Key == "overlay-relative") {
>> + if (!parseScalarBool(I->getValue(), FS->IsRelativeOverlay))
>> + return false;
>> } else if (Key == "use-external-names") {
>> if (!parseScalarBool(I->getValue(), FS->UseExternalNames))
>> return false;
>> @@ -1233,9 +1265,11 @@ public:
>>
>> Entry::~Entry() = default;
>>
>> -RedirectingFileSystem *RedirectingFileSystem::create(
>> - std::unique_ptr<MemoryBuffer> Buffer, SourceMgr::DiagHandlerTy
>> DiagHandler,
>> - void *DiagContext, IntrusiveRefCntPtr<FileSystem> ExternalFS) {
>> +RedirectingFileSystem *
>> +RedirectingFileSystem::create(std::unique_ptr<MemoryBuffer> Buffer,
>> + SourceMgr::DiagHandlerTy DiagHandler,
>> + StringRef YAMLFilePath, void *DiagContext,
>> + IntrusiveRefCntPtr<FileSystem> ExternalFS)
>> {
>>
>> SourceMgr SM;
>> yaml::Stream Stream(Buffer->getMemBufferRef(), SM);
>> @@ -1252,6 +1286,23 @@ RedirectingFileSystem *RedirectingFileSy
>>
>> std::unique_ptr<RedirectingFileSystem> FS(
>> new RedirectingFileSystem(ExternalFS));
>> +
>> + if (!YAMLFilePath.empty()) {
>> + // Use the YAML path from -ivfsoverlay to compute the dir to be
>> prefixed
>> + // to each 'external-contents' path.
>> + //
>> + // Example:
>> + // -ivfsoverlay dummy.cache/vfs/vfs.yaml
>> + // yields:
>> + // FS->ExternalContentsPrefixDir =>
>> /<absolute_path_to>/dummy.cache/vfs
>> + //
>> + SmallString<256> OverlayAbsDir =
>> sys::path::parent_path(YAMLFilePath);
>> + std::error_code EC = llvm::sys::fs::make_absolute(OverlayAbsDir);
>> + assert(!EC && "Overlay dir final path must be absolute");
>> + (void)EC;
>> + FS->setExternalContentsPrefixDir(OverlayAbsDir);
>> + }
>> +
>> if (!P.parse(Root, FS.get()))
>> return nullptr;
>>
>> @@ -1396,10 +1447,12 @@ RedirectingFileSystem::openFileForRead(c
>>
>> IntrusiveRefCntPtr<FileSystem>
>> vfs::getVFSFromYAML(std::unique_ptr<MemoryBuffer> Buffer,
>> - SourceMgr::DiagHandlerTy DiagHandler, void
>> *DiagContext,
>> + SourceMgr::DiagHandlerTy DiagHandler,
>> + StringRef YAMLFilePath,
>> + void *DiagContext,
>> IntrusiveRefCntPtr<FileSystem> ExternalFS) {
>> return RedirectingFileSystem::create(std::move(Buffer), DiagHandler,
>> - DiagContext, ExternalFS);
>> + YAMLFilePath, DiagContext,
>> ExternalFS);
>> }
>>
>> UniqueID vfs::getNextVirtualUniqueID() {
>> @@ -1431,7 +1484,8 @@ class JSONWriter {
>>
>> public:
>> JSONWriter(llvm::raw_ostream &OS) : OS(OS) {}
>> - void write(ArrayRef<YAMLVFSEntry> Entries, Optional<bool>
>> IsCaseSensitive);
>> + void write(ArrayRef<YAMLVFSEntry> Entries, Optional<bool>
>> IsCaseSensitive,
>> + Optional<bool> IsOverlayRelative, StringRef OverlayDir);
>> };
>> }
>>
>> @@ -1484,7 +1538,9 @@ void JSONWriter::writeEntry(StringRef VP
>> }
>>
>> void JSONWriter::write(ArrayRef<YAMLVFSEntry> Entries,
>> - Optional<bool> IsCaseSensitive) {
>> + Optional<bool> IsCaseSensitive,
>> + Optional<bool> IsOverlayRelative,
>> + StringRef OverlayDir) {
>> using namespace llvm::sys;
>>
>> OS << "{\n"
>> @@ -1492,12 +1548,27 @@ void JSONWriter::write(ArrayRef<YAMLVFSE
>> if (IsCaseSensitive.hasValue())
>> OS << " 'case-sensitive': '"
>> << (IsCaseSensitive.getValue() ? "true" : "false") << "',\n";
>> + bool UseOverlayRelative = false;
>> + if (IsOverlayRelative.hasValue()) {
>> + UseOverlayRelative = IsOverlayRelative.getValue();
>> + OS << " 'overlay-relative': '"
>> + << (UseOverlayRelative ? "true" : "false") << "',\n";
>> + }
>> OS << " 'roots': [\n";
>>
>> if (!Entries.empty()) {
>> const YAMLVFSEntry &Entry = Entries.front();
>> startDirectory(path::parent_path(Entry.VPath));
>> - writeEntry(path::filename(Entry.VPath), Entry.RPath);
>> +
>> + StringRef RPath = Entry.RPath;
>> + if (UseOverlayRelative) {
>> + unsigned OverlayDirLen = OverlayDir.size();
>> + assert(RPath.substr(0, OverlayDirLen) == OverlayDir &&
>> + "Overlay dir must be contained in RPath");
>> + RPath = RPath.slice(OverlayDirLen, RPath.size());
>> + }
>> +
>> + writeEntry(path::filename(Entry.VPath), RPath);
>>
>> for (const auto &Entry : Entries.slice(1)) {
>> StringRef Dir = path::parent_path(Entry.VPath);
>> @@ -1511,7 +1582,14 @@ void JSONWriter::write(ArrayRef<YAMLVFSE
>> OS << ",\n";
>> startDirectory(Dir);
>> }
>> - writeEntry(path::filename(Entry.VPath), Entry.RPath);
>> + StringRef RPath = Entry.RPath;
>> + if (UseOverlayRelative) {
>> + unsigned OverlayDirLen = OverlayDir.size();
>> + assert(RPath.substr(0, OverlayDirLen) == OverlayDir &&
>> + "Overlay dir must be contained in RPath");
>> + RPath = RPath.slice(OverlayDirLen, RPath.size());
>> + }
>> + writeEntry(path::filename(Entry.VPath), RPath);
>> }
>>
>> while (!DirStack.empty()) {
>> @@ -1531,7 +1609,8 @@ void YAMLVFSWriter::write(llvm::raw_ostr
>> return LHS.VPath < RHS.VPath;
>> });
>>
>> - JSONWriter(OS).write(Mappings, IsCaseSensitive);
>> + JSONWriter(OS).write(Mappings, IsCaseSensitive, IsOverlayRelative,
>> + OverlayDir);
>> }
>>
>> VFSFromYamlDirIterImpl::VFSFromYamlDirIterImpl(
>>
>> Modified: cfe/trunk/lib/Frontend/CompilerInvocation.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/CompilerInvocation.cpp?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/CompilerInvocation.cpp (original)
>> +++ cfe/trunk/lib/Frontend/CompilerInvocation.cpp Mon Feb 22 12:41:09 2016
>> @@ -2344,8 +2344,8 @@ createVFSFromCompilerInvocation(const Co
>> return IntrusiveRefCntPtr<vfs::FileSystem>();
>> }
>>
>> - IntrusiveRefCntPtr<vfs::FileSystem> FS =
>> - vfs::getVFSFromYAML(std::move(Buffer.get()), /*DiagHandler*/
>> nullptr);
>> + IntrusiveRefCntPtr<vfs::FileSystem> FS = vfs::getVFSFromYAML(
>> + std::move(Buffer.get()), /*DiagHandler*/ nullptr, File);
>> if (!FS.get()) {
>> Diags.Report(diag::err_invalid_vfs_overlay) << File;
>> return IntrusiveRefCntPtr<vfs::FileSystem>();
>>
>> Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp (original)
>> +++ cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp Mon Feb 22
>> 12:41:09 2016
>> @@ -51,6 +51,10 @@ void ModuleDependencyCollector::writeFil
>> SmallString<256> Dest = getDest();
>> llvm::sys::path::append(Dest, "vfs.yaml");
>>
>> + // Default to use relative overlay directories in the VFS yaml file.
>> This
>> + // allows crash reproducer scripts to work across machines.
>> + VFSWriter.setOverlayDir(getDest());
>> +
>> std::error_code EC;
>> llvm::raw_fd_ostream OS(Dest, EC, llvm::sys::fs::F_Text);
>> if (EC) {
>>
>> Modified: cfe/trunk/test/Modules/crash-vfs-path-symlink-component.m
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/crash-vfs-path-symlink-component.m?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Modules/crash-vfs-path-symlink-component.m (original)
>> +++ cfe/trunk/test/Modules/crash-vfs-path-symlink-component.m Mon Feb 22
>> 12:41:09 2016
>> @@ -40,21 +40,21 @@
>> // CHECKSH: "-ivfsoverlay" "crash-vfs-{{[^ ]*}}.cache/vfs/vfs.yaml"
>>
>> // CHECKYAML: 'type': 'directory'
>> -// CHECKYAML: 'name': "{{[^ ]*}}/i/usr/include",
>> +// CHECKYAML: 'name': "/[[PATH:.*]]/i/usr/include",
>> // CHECKYAML-NEXT: 'contents': [
>> // CHECKYAML-NEXT: {
>> // CHECKYAML-NEXT: 'type': 'file',
>> // CHECKYAML-NEXT: 'name': "module.map",
>> -// CHECKYAML-NEXT: 'external-contents': "{{[^ ]*}}.cache/vfs/{{[^
>> ]*}}/i/usr/include/module.map"
>> +// CHECKYAML-NEXT: 'external-contents':
>> "/[[PATH]]/i/usr/include/module.map"
>> // CHECKYAML-NEXT: },
>>
>> // CHECKYAML: 'type': 'directory'
>> -// CHECKYAML: 'name': "{{[^ ]*}}/i/usr",
>> +// CHECKYAML: 'name': "/[[PATH]]/i/usr",
>> // CHECKYAML-NEXT: 'contents': [
>> // CHECKYAML-NEXT: {
>> // CHECKYAML-NEXT: 'type': 'file',
>> // CHECKYAML-NEXT: 'name': "module.map",
>> -// CHECKYAML-NEXT: 'external-contents': "{{[^ ]*}}.cache/vfs/{{[^
>> ]*}}/i/usr/include/module.map"
>> +// CHECKYAML-NEXT: 'external-contents':
>> "/[[PATH]]/i/usr/include/module.map"
>> // CHECKYAML-NEXT: },
>>
>> // Test that by using the previous generated YAML file clang is able to
>> find the
>>
>> Modified: cfe/trunk/test/Modules/crash-vfs-path-traversal.m
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/crash-vfs-path-traversal.m?rev=261552&r1=261551&r2=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Modules/crash-vfs-path-traversal.m (original)
>> +++ cfe/trunk/test/Modules/crash-vfs-path-traversal.m Mon Feb 22 12:41:09
>> 2016
>> @@ -35,12 +35,12 @@
>> // CHECKSH: "-ivfsoverlay" "crash-vfs-{{[^ ]*}}.cache/vfs/vfs.yaml"
>>
>> // CHECKYAML: 'type': 'directory'
>> -// CHECKYAML: 'name': "{{[^ ]*}}/Inputs/System/usr/include",
>> +// CHECKYAML: 'name': "/[[PATH:.*]]/Inputs/System/usr/include",
>> // CHECKYAML-NEXT: 'contents': [
>> // CHECKYAML-NEXT: {
>> // CHECKYAML-NEXT: 'type': 'file',
>> // CHECKYAML-NEXT: 'name': "module.map",
>> -// CHECKYAML-NEXT: 'external-contents': "{{[^
>> ]*}}/Inputs/System/usr/include/module.map"
>> +// CHECKYAML-NEXT: 'external-contents':
>> "/[[PATH]]/Inputs/System/usr/include/module.map"
>> // CHECKYAML-NEXT: },
>>
>> // Replace the paths in the YAML files with relative ".." traversals
>> @@ -49,9 +49,10 @@
>>
>> // RUN: sed -e "s at usr/include at usr/include/../include at g" \
>> // RUN: %t/crash-vfs-*.cache/vfs/vfs.yaml > %t/vfs.yaml
>> +// RUN: cp %t/vfs.yaml %t/crash-vfs-*.cache/vfs/vfs.yaml
>> // RUN: unset FORCE_CLANG_DIAGNOSTICS_CRASH
>> // RUN: %clang -E %s -I %S/Inputs/System -isysroot %/t/i/ \
>> -// RUN: -ivfsoverlay %t/vfs.yaml -fmodules \
>> +// RUN: -ivfsoverlay %t/crash-vfs-*.cache/vfs/vfs.yaml -fmodules \
>> // RUN: -fmodules-cache-path=%t/m/ 2>&1 \
>> // RUN: | FileCheck %s --check-prefix=CHECKOVERLAY
>>
>>
>> Copied: cfe/trunk/test/Modules/crash-vfs-relative-overlay.m (from r261551,
>> cfe/trunk/test/Modules/crash-vfs-path-traversal.m)
>> URL:
>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/crash-vfs-relative-overlay.m?p2=cfe/trunk/test/Modules/crash-vfs-relative-overlay.m&p1=cfe/trunk/test/Modules/crash-vfs-path-traversal.m&r1=261551&r2=261552&rev=261552&view=diff
>>
>> ==============================================================================
>> --- cfe/trunk/test/Modules/crash-vfs-path-traversal.m (original)
>> +++ cfe/trunk/test/Modules/crash-vfs-relative-overlay.m Mon Feb 22
>> 12:41:09 2016
>> @@ -17,7 +17,7 @@
>> // RUN: find %t/crash-vfs-*.cache/vfs | \
>> // RUN: grep "Inputs/System/usr/include/stdio.h" | count 1
>>
>> -#include "usr/././//////include/../include/./././../include/stdio.h"
>> +#include "usr/include/stdio.h"
>>
>> // CHECK: Preprocessed source(s) and associated run script(s) are located
>> at:
>> // CHECK-NEXT: note: diagnostic msg: {{.*}}.m
>> @@ -35,23 +35,21 @@
>> // CHECKSH: "-ivfsoverlay" "crash-vfs-{{[^ ]*}}.cache/vfs/vfs.yaml"
>>
>> // CHECKYAML: 'type': 'directory'
>> -// CHECKYAML: 'name': "{{[^ ]*}}/Inputs/System/usr/include",
>> +// CHECKYAML: 'name': "/[[PATH:.*]]/Inputs/System/usr/include",
>> // CHECKYAML-NEXT: 'contents': [
>> // CHECKYAML-NEXT: {
>> // CHECKYAML-NEXT: 'type': 'file',
>> // CHECKYAML-NEXT: 'name': "module.map",
>> -// CHECKYAML-NEXT: 'external-contents': "{{[^
>> ]*}}/Inputs/System/usr/include/module.map"
>> +// CHECKYAML-NOT: 'external-contents': "{{[^ ]*}}.cache
>> +// CHECKYAML-NEXT: 'external-contents':
>> "/[[PATH]]/Inputs/System/usr/include/module.map"
>> // CHECKYAML-NEXT: },
>>
>> -// Replace the paths in the YAML files with relative ".." traversals
>> -// and fed into clang to test whether we're correctly representing them
>> -// in the VFS overlay.
>> +// Test that reading the YAML file will yield the correct path after
>> +// the overlay dir is prefixed to access headers in .cache/vfs directory.
>>
>> -// RUN: sed -e "s at usr/include at usr/include/../include at g" \
>> -// RUN: %t/crash-vfs-*.cache/vfs/vfs.yaml > %t/vfs.yaml
>> // RUN: unset FORCE_CLANG_DIAGNOSTICS_CRASH
>> // RUN: %clang -E %s -I %S/Inputs/System -isysroot %/t/i/ \
>> -// RUN: -ivfsoverlay %t/vfs.yaml -fmodules \
>> +// RUN: -ivfsoverlay %t/crash-vfs-*.cache/vfs/vfs.yaml -fmodules \
>> // RUN: -fmodules-cache-path=%t/m/ 2>&1 \
>> // RUN: | FileCheck %s --check-prefix=CHECKOVERLAY
>>
>>
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>
>
--
Bruno Cardoso Lopes
http://www.brunocardoso.cc
More information about the cfe-commits
mailing list