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@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@usr/include@usr/include/../include@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@usr/include@usr/include/../include@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@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits >
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits