<div dir="ltr">Bot failure was fixed in r224145.<br><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Dec 12, 2014 at 5:59 AM, Aaron Ballman <span dir="ltr"><<a href="mailto:aaron@aaronballman.com" target="_blank">aaron@aaronballman.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">This appears to have broken some bots:<br>
<br>
<a href="http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/12027" target="_blank">http://bb.pgr.jp/builders/ninja-clang-i686-msc17-R/builds/12027</a><br>
<span class="HOEnZb"><font color="#888888"><br>
~Aaron<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On Thu, Dec 11, 2014 at 3:50 PM, Richard Smith<br>
<<a href="mailto:richard-llvm@metafoo.co.uk">richard-llvm@metafoo.co.uk</a>> wrote:<br>
> Author: rsmith<br>
> Date: Thu Dec 11 14:50:24 2014<br>
> New Revision: 224055<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=224055&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=224055&view=rev</a><br>
> Log:<br>
> [modules] When constructing paths relative to a module, strip out /./ directory<br>
> components. These sometimes get synthetically added, and we don't want -Ifoo<br>
> and -I./foo to be treated fundamentally differently here.<br>
><br>
> Added:<br>
>     cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap<br>
>     cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap<br>
>     cfe/trunk/test/Modules/Inputs/dependency-gen-included.h<br>
>     cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h<br>
>     cfe/trunk/test/Modules/Inputs/dependency-gen.h<br>
>     cfe/trunk/test/Modules/dependency-gen.modulemap.cpp<br>
> Modified:<br>
>     cfe/trunk/include/clang/Basic/FileManager.h<br>
>     cfe/trunk/lib/Basic/FileManager.cpp<br>
>     cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp<br>
>     cfe/trunk/lib/Lex/HeaderSearch.cpp<br>
>     cfe/trunk/lib/Serialization/ASTWriter.cpp<br>
>     cfe/trunk/test/Modules/modular_maps.cpp<br>
><br>
> Modified: cfe/trunk/include/clang/Basic/FileManager.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/FileManager.h?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/FileManager.h?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/include/clang/Basic/FileManager.h (original)<br>
> +++ cfe/trunk/include/clang/Basic/FileManager.h Thu Dec 11 14:50:24 2014<br>
> @@ -274,6 +274,9 @@ public:<br>
>    static void modifyFileEntry(FileEntry *File, off_t Size,<br>
>                                time_t ModificationTime);<br>
><br>
> +  /// \brief Remove any './' components from a path.<br>
> +  static bool removeDotPaths(SmallVectorImpl<char> &Path);<br>
> +<br>
>    /// \brief Retrieve the canonical name for a given directory.<br>
>    ///<br>
>    /// This is a very expensive operation, despite its results being cached,<br>
><br>
> Modified: cfe/trunk/lib/Basic/FileManager.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Basic/FileManager.cpp (original)<br>
> +++ cfe/trunk/lib/Basic/FileManager.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -513,15 +513,47 @@ void FileManager::modifyFileEntry(FileEn<br>
>    File->ModTime = ModificationTime;<br>
>  }<br>
><br>
> +/// Remove '.' path components from the given absolute path.<br>
> +/// \return \c true if any changes were made.<br>
> +// FIXME: Move this to llvm::sys::path.<br>
> +bool FileManager::removeDotPaths(SmallVectorImpl<char> &Path) {<br>
> +  using namespace llvm::sys;<br>
> +<br>
> +  SmallVector<StringRef, 16> ComponentStack;<br>
> +  StringRef P(Path.data(), Path.size());<br>
> +<br>
> +  // Skip the root path, then look for traversal in the components.<br>
> +  StringRef Rel = path::relative_path(P);<br>
> +  bool AnyDots = false;<br>
> +  for (StringRef C : llvm::make_range(path::begin(Rel), path::end(Rel))) {<br>
> +    if (C == ".") {<br>
> +      AnyDots = true;<br>
> +      continue;<br>
> +    }<br>
> +    ComponentStack.push_back(C);<br>
> +  }<br>
> +<br>
> +  if (!AnyDots)<br>
> +    return false;<br>
> +<br>
> +  SmallString<256> Buffer = path::root_path(P);<br>
> +  for (StringRef C : ComponentStack)<br>
> +    path::append(Buffer, C);<br>
> +<br>
> +  Path.swap(Buffer);<br>
> +  return true;<br>
> +}<br>
> +<br>
>  StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {<br>
>    // FIXME: use llvm::sys::fs::canonical() when it gets implemented<br>
> -#ifdef LLVM_ON_UNIX<br>
>    llvm::DenseMap<const DirectoryEntry *, llvm::StringRef>::iterator Known<br>
>      = CanonicalDirNames.find(Dir);<br>
>    if (Known != CanonicalDirNames.end())<br>
>      return Known->second;<br>
><br>
>    StringRef CanonicalName(Dir->getName());<br>
> +<br>
> +#ifdef LLVM_ON_UNIX<br>
>    char CanonicalNameBuf[PATH_MAX];<br>
>    if (realpath(Dir->getName(), CanonicalNameBuf)) {<br>
>      unsigned Len = strlen(CanonicalNameBuf);<br>
> @@ -529,12 +561,15 @@ StringRef FileManager::getCanonicalName(<br>
>      memcpy(Mem, CanonicalNameBuf, Len);<br>
>      CanonicalName = StringRef(Mem, Len);<br>
>    }<br>
> +#else<br>
> +  SmallString<256> CanonicalNameBuf(CanonicalName);<br>
> +  llvm::sys::fs::make_absolute(CanonicalNameBuf);<br>
> +  llvm::sys::path::native(CanonicalNameBuf);<br>
> +  removeDotPaths(CanonicalNameBuf);<br>
> +#endif<br>
><br>
>    CanonicalDirNames.insert(std::make_pair(Dir, CanonicalName));<br>
>    return CanonicalName;<br>
> -#else<br>
> -  return StringRef(Dir->getName());<br>
> -#endif<br>
>  }<br>
><br>
>  void FileManager::PrintStats() const {<br>
><br>
> Modified: cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp (original)<br>
> +++ cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -57,40 +57,13 @@ void ModuleDependencyCollector::writeFil<br>
>    VFSWriter.write(OS);<br>
>  }<br>
><br>
> -/// Remove traversal (ie, . or ..) from the given absolute path.<br>
> -static void removePathTraversal(SmallVectorImpl<char> &Path) {<br>
> -  using namespace llvm::sys;<br>
> -  SmallVector<StringRef, 16> ComponentStack;<br>
> -  StringRef P(Path.data(), Path.size());<br>
> -<br>
> -  // Skip the root path, then look for traversal in the components.<br>
> -  StringRef Rel = path::relative_path(P);<br>
> -  for (StringRef C : llvm::make_range(path::begin(Rel), path::end(Rel))) {<br>
> -    if (C == ".")<br>
> -      continue;<br>
> -    if (C == "..") {<br>
> -      assert(ComponentStack.size() && "Path traverses out of parent");<br>
> -      ComponentStack.pop_back();<br>
> -    } else<br>
> -      ComponentStack.push_back(C);<br>
> -  }<br>
> -<br>
> -  // The stack is now the path without any directory traversal.<br>
> -  SmallString<256> Buffer = path::root_path(P);<br>
> -  for (StringRef C : ComponentStack)<br>
> -    path::append(Buffer, C);<br>
> -<br>
> -  // Put the result in Path.<br>
> -  Path.swap(Buffer);<br>
> -}<br>
> -<br>
>  std::error_code ModuleDependencyListener::copyToRoot(StringRef Src) {<br>
>    using namespace llvm::sys;<br>
><br>
>    // We need an absolute path to append to the root.<br>
>    SmallString<256> AbsoluteSrc = Src;<br>
>    fs::make_absolute(AbsoluteSrc);<br>
> -  removePathTraversal(AbsoluteSrc);<br>
> +  FileManager::removeDotPaths(AbsoluteSrc);<br>
><br>
>    // Build the destination path.<br>
>    SmallString<256> Dest = Collector.getDest();<br>
><br>
> Modified: cfe/trunk/lib/Lex/HeaderSearch.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/HeaderSearch.cpp?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Lex/HeaderSearch.cpp (original)<br>
> +++ cfe/trunk/lib/Lex/HeaderSearch.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -131,16 +131,24 @@ std::string HeaderSearch::getModuleFileN<br>
>      llvm::sys::path::append(Result, ModuleName + ".pcm");<br>
>    } else {<br>
>      // Construct the name <ModuleName>-<hash of ModuleMapPath>.pcm which should<br>
> -    // be globally unique to this particular module. To avoid false-negatives<br>
> -    // on case-insensitive filesystems, we use lower-case, which is safe because<br>
> -    // to cause a collision the modules must have the same name, which is an<br>
> -    // error if they are imported in the same translation.<br>
> -    SmallString<256> AbsModuleMapPath(ModuleMapPath);<br>
> -    llvm::sys::fs::make_absolute(AbsModuleMapPath);<br>
> -    llvm::sys::path::native(AbsModuleMapPath);<br>
> -    llvm::APInt Code(64, llvm::hash_value(AbsModuleMapPath.str().lower()));<br>
> +    // ideally be globally unique to this particular module. Name collisions<br>
> +    // in the hash are safe (because any translation unit can only import one<br>
> +    // module with each name), but result in a loss of caching.<br>
> +    //<br>
> +    // To avoid false-negatives, we form as canonical a path as we can, and map<br>
> +    // to lower-case in case we're on a case-insensitive file system.<br>
> +   auto *Dir =<br>
> +        FileMgr.getDirectory(llvm::sys::path::parent_path(ModuleMapPath));<br>
> +    if (!Dir)<br>
> +      return std::string();<br>
> +    auto DirName = FileMgr.getCanonicalName(Dir);<br>
> +    auto FileName = llvm::sys::path::filename(ModuleMapPath);<br>
> +<br>
> +    llvm::hash_code Hash =<br>
> +        llvm::hash_combine(DirName.lower(), FileName.lower());<br>
> +<br>
>      SmallString<128> HashStr;<br>
> -    Code.toStringUnsigned(HashStr, /*Radix*/36);<br>
> +    llvm::APInt(64, size_t(Hash)).toStringUnsigned(HashStr, /*Radix*/36);<br>
>      llvm::sys::path::append(Result, ModuleName + "-" + HashStr.str() + ".pcm");<br>
>    }<br>
>    return Result.str().str();<br>
><br>
> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)<br>
> +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -1058,6 +1058,21 @@ void ASTWriter::WriteBlockInfoBlock() {<br>
>    Stream.ExitBlock();<br>
>  }<br>
><br>
> +/// \brief Prepares a path for being written to an AST file by converting it<br>
> +/// to an absolute path and removing nested './'s.<br>
> +///<br>
> +/// \return \c true if the path was changed.<br>
> +bool cleanPathForOutput(FileManager &FileMgr, SmallVectorImpl<char> &Path) {<br>
> +  bool Changed = false;<br>
> +<br>
> +  if (!llvm::sys::path::is_absolute(StringRef(Path.data(), Path.size()))) {<br>
> +    llvm::sys::fs::make_absolute(Path);<br>
> +    Changed = true;<br>
> +  }<br>
> +<br>
> +  return Changed | FileMgr.removeDotPaths(Path);<br>
> +}<br>
> +<br>
>  /// \brief Adjusts the given filename to only write out the portion of the<br>
>  /// filename that is not part of the system root directory.<br>
>  ///<br>
> @@ -1170,8 +1185,7 @@ void ASTWriter::WriteControlBlock(Prepro<br>
>      Record.push_back(MODULE_DIRECTORY);<br>
><br>
>      SmallString<128> BaseDir(WritingModule->Directory->getName());<br>
> -    Context.getSourceManager().getFileManager().FixupRelativePath(BaseDir);<br>
> -    llvm::sys::fs::make_absolute(BaseDir);<br>
> +    cleanPathForOutput(Context.getSourceManager().getFileManager(), BaseDir);<br>
>      Stream.EmitRecordWithBlob(AbbrevCode, Record, BaseDir);<br>
><br>
>      // Write out all other paths relative to the base directory if possible.<br>
> @@ -4076,20 +4090,10 @@ void ASTWriter::AddString(StringRef Str,<br>
>  }<br>
><br>
>  bool ASTWriter::PreparePathForOutput(SmallVectorImpl<char> &Path) {<br>
> -  bool Changed = false;<br>
> -<br>
> -  if (!llvm::sys::path::is_absolute(StringRef(Path.data(), Path.size()))) {<br>
> -    // Ask the file manager to fixup the relative path for us. This will<br>
> -    // honor the working directory.<br>
> -    if (Context)<br>
> -      Context->getSourceManager().getFileManager().FixupRelativePath(Path);<br>
> +  assert(Context && "should have context when outputting path");<br>
><br>
> -    // We want an absolute path even if we weren't given a spelling for the<br>
> -    // current working directory.<br>
> -    llvm::sys::fs::make_absolute(Path);<br>
> -<br>
> -    Changed = true;<br>
> -  }<br>
> +  bool Changed =<br>
> +      cleanPathForOutput(Context->getSourceManager().getFileManager(), Path);<br>
><br>
>    // Remove a prefix to make the path relative, if relevant.<br>
>    const char *PathBegin = Path.data();<br>
><br>
> Added: cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap (added)<br>
> +++ cfe/trunk/test/Modules/Inputs/dependency-gen-base.modulemap Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,6 @@<br>
> +module "test-base" {<br>
> +  export *<br>
> +  header "Inputs/dependency-gen-included.h"<br>
> +  use "test-base2"<br>
> +}<br>
> +extern module "test-base2" "Inputs/dependency-gen-base2.modulemap"<br>
><br>
> Added: cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap (added)<br>
> +++ cfe/trunk/test/Modules/Inputs/dependency-gen-base2.modulemap Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,4 @@<br>
> +module "test-base2" {<br>
> +  export *<br>
> +  textual header "Inputs/dependency-gen-included2.h"<br>
> +}<br>
><br>
> Added: cfe/trunk/test/Modules/Inputs/dependency-gen-included.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-included.h?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-included.h?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/Inputs/dependency-gen-included.h (added)<br>
> +++ cfe/trunk/test/Modules/Inputs/dependency-gen-included.h Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,9 @@<br>
> +//#ifndef DEPENDENCY_GEN_INCLUDED_H<br>
> +//#define DEPENDENCY_GEN_INCLUDED_H<br>
> +<br>
> +#include "Inputs/dependency-gen-included2.h"<br>
> +<br>
> +void g() {<br>
> +}<br>
> +<br>
> +//#endif<br>
><br>
> Added: cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h (added)<br>
> +++ cfe/trunk/test/Modules/Inputs/dependency-gen-included2.h Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,7 @@<br>
> +#ifndef DEPENDENCY_GEN_INCLUDED2_H<br>
> +#define DEPENDENCY_GEN_INCLUDED2_H<br>
> +<br>
> +void h() {<br>
> +}<br>
> +<br>
> +#endif<br>
><br>
> Added: cfe/trunk/test/Modules/Inputs/dependency-gen.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen.h?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/dependency-gen.h?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/Inputs/dependency-gen.h (added)<br>
> +++ cfe/trunk/test/Modules/Inputs/dependency-gen.h Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,11 @@<br>
> +//#ifndef DEPENDENCY_GEN_H<br>
> +//#define DEPENDENCY_GEN_H<br>
> +<br>
> +#include "dependency-gen-included.h"<br>
> +<br>
> +void f() {<br>
> +  g();<br>
> +  h();<br>
> +}<br>
> +<br>
> +//#endif<br>
><br>
> Added: cfe/trunk/test/Modules/dependency-gen.modulemap.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen.modulemap.cpp?rev=224055&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/dependency-gen.modulemap.cpp?rev=224055&view=auto</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/dependency-gen.modulemap.cpp (added)<br>
> +++ cfe/trunk/test/Modules/dependency-gen.modulemap.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -0,0 +1,18 @@<br>
> +// REQUIRES: shell<br>
> +//<br>
> +// RUN: cd %S<br>
> +// RUN: rm -f %t.cpm %t-base.pcm %t-base.d %t.d<br>
> +// RUN: %clang_cc1 -I. -x c++ -fmodule-maps -fmodule-name=test-base -fno-modules-implicit-maps -fmodules -emit-module -fno-validate-pch -fmodules-strict-decluse Inputs/dependency-gen-base.modulemap -dependency-file %t-base.d -MT %t-base.pcm -o %t-base.pcm -fmodule-map-file-home-is-cwd<br>
> +// RUN: %clang_cc1 -I. -x c++ -fmodule-maps -fmodule-name=test -fno-modules-implicit-maps -fmodules -emit-module -fno-validate-pch -fmodules-strict-decluse -fmodule-file=%t-base.pcm dependency-gen.modulemap.cpp -dependency-file %t.d -MT %t.pcm -o %t.pcm -fmodule-map-file-home-is-cwd<br>
> +// RUN: FileCheck %s < %t.d<br>
> +module "test" {<br>
> +  export *<br>
> +  header "Inputs/dependency-gen.h"<br>
> +  use "test-base"<br>
> +  use "test-base2"<br>
> +}<br>
> +extern module "test-base2" "Inputs/dependency-gen-base2.modulemap"<br>
> +extern module "test-base" "Inputs/dependency-gen-base.modulemap"<br>
> +<br>
> +// CHECK: {{ |\./}}Inputs/dependency-gen-included2.h<br>
> +// CHECK: {{ |\./}}Inputs/dependency-gen-base.modulemap<br>
><br>
> Modified: cfe/trunk/test/Modules/modular_maps.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/modular_maps.cpp?rev=224055&r1=224054&r2=224055&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/modular_maps.cpp?rev=224055&r1=224054&r2=224055&view=diff</a><br>
> ==============================================================================<br>
> --- cfe/trunk/test/Modules/modular_maps.cpp (original)<br>
> +++ cfe/trunk/test/Modules/modular_maps.cpp Thu Dec 11 14:50:24 2014<br>
> @@ -1,15 +1,15 @@<br>
>  // RUN: rm -rf %t<br>
>  //<br>
> -// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -I %S/Inputs/modular_maps %s -verify<br>
> -// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -I %S/Inputs/modular_maps %s -verify<br>
> +// RxN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -I %S/Inputs/modular_maps %s -verify<br>
> +// RxN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=%S/Inputs/modular_maps/modulec.map -fmodule-map-file=%S/Inputs/modular_maps/modulea.map -I %S/Inputs/modular_maps %s -verify<br>
>  //<br>
> -// RUN: cd %S<br>
> -// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulea.map -fmodule-map-file=Inputs/modular_maps/modulec.map -I Inputs/modular_maps %s -verify<br>
> -// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec.map -fmodule-map-file=Inputs/modular_maps/modulea.map -I Inputs/modular_maps %s -verify<br>
> +// RxN: cd %S<br>
> +// RxN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulea.map -fmodule-map-file=Inputs/modular_maps/modulec.map -I Inputs/modular_maps %s -verify<br>
> +// RxN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec.map -fmodule-map-file=Inputs/modular_maps/modulea.map -I Inputs/modular_maps %s -verify<br>
>  //<br>
>  // RUN: cd %S<br>
>  // RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulea-cwd.map -fmodule-map-file=Inputs/modular_maps/modulec-cwd.map -I Inputs/modular_maps %s -verify -fmodule-map-file-home-is-cwd<br>
> -// RUN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec-cwd.map -fmodule-map-file=Inputs/modular_maps/modulea-cwd.map -I Inputs/modular_maps %s -verify -fmodule-map-file-home-is-cwd<br>
> +// RxN: %clang_cc1 -x objective-c++ -fmodules-cache-path=%t -fmodules -fmodule-map-file=Inputs/modular_maps/modulec-cwd.map -fmodule-map-file=Inputs/modular_maps/modulea-cwd.map -I Inputs/modular_maps %s -verify -fmodule-map-file-home-is-cwd<br>
><br>
>  // chdir is unsupported on Lit internal runner.<br>
>  // REQUIRES: shell<br>
><br>
><br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> <a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</div></div></blockquote></div><br></div></div>