r261552 - [VFS] Add 'overlay-relative' field to YAML files
Sean Silva via cfe-commits
cfe-commits at lists.llvm.org
Mon Feb 22 17:45:56 PST 2016
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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160222/3db7d4bd/attachment-0001.html>
More information about the cfe-commits
mailing list