From cfe-commits Fri Jul 31 00:58:32 2015 From: Argyrios Kyrtzidis Date: Fri, 31 Jul 2015 00:58:32 +0000 To: cfe-commits Subject: r243718 - [modules] Fix issue where building a module from a relative path when -working-directory o Message-Id: <20150731005833.099B42A6C037 () llvm ! org> X-MARC-Message: https://marc.info/?l=cfe-commits&m=143830441824528 Author: akirtzidis Date: Thu Jul 30 19:58:32 2015 New Revision: 243718 URL: http://llvm.org/viewvc/llvm-project?rev=243718&view=rev Log: [modules] Fix issue where building a module from a relative path when -working-directory option is set, results in error. The error was "module '' was built in directory '' but now resides in directory '' rdar://21330027 Added: cfe/trunk/test/Modules/Inputs/working-dir-test/ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/Test.h cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/module.modulemap cfe/trunk/test/Modules/working-dir-flag.m Modified: cfe/trunk/include/clang/Basic/FileManager.h cfe/trunk/lib/Basic/FileManager.cpp cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/include/clang/Basic/FileManager.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/FileManager.h?rev=243718&r1=243717&r2=243718&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/FileManager.h (original) +++ cfe/trunk/include/clang/Basic/FileManager.h Thu Jul 30 19:58:32 2015 @@ -254,7 +254,13 @@ public: /// \brief If path is not absolute and FileSystemOptions set the working /// directory, the path is modified to be relative to the given /// working directory. - void FixupRelativePath(SmallVectorImpl &path) const; + /// \returns true if \c path changed. + bool FixupRelativePath(SmallVectorImpl &path) const; + + /// Makes \c Path absolute taking into account FileSystemOptions and the + /// working directory option. + /// \returns true if \c Path changed to absolute. + bool makeAbsolutePath(SmallVectorImpl &Path) const; /// \brief Produce an array mapping from the unique IDs assigned to each /// file to the corresponding FileEntry pointer. Modified: cfe/trunk/lib/Basic/FileManager.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/FileManager.cpp?rev=243718&r1=243717&r2=243718&view=diff ============================================================================== --- cfe/trunk/lib/Basic/FileManager.cpp (original) +++ cfe/trunk/lib/Basic/FileManager.cpp Thu Jul 30 19:58:32 2015 @@ -389,16 +389,28 @@ FileManager::getVirtualFile(StringRef Fi return UFE; } -void FileManager::FixupRelativePath(SmallVectorImpl &path) const { +bool FileManager::FixupRelativePath(SmallVectorImpl &path) const { StringRef pathRef(path.data(), path.size()); if (FileSystemOpts.WorkingDir.empty() || llvm::sys::path::is_absolute(pathRef)) - return; + return false; SmallString<128> NewPath(FileSystemOpts.WorkingDir); llvm::sys::path::append(NewPath, pathRef); path = NewPath; + return true; +} + +bool FileManager::makeAbsolutePath(SmallVectorImpl &Path) const { + bool Changed = FixupRelativePath(Path); + + if (!llvm::sys::path::is_absolute(StringRef(Path.data(), Path.size()))) { + llvm::sys::fs::make_absolute(Path); + Changed = true; + } + + return Changed; } llvm::ErrorOr> Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=243718&r1=243717&r2=243718&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Thu Jul 30 19:58:32 2015 @@ -1074,14 +1074,7 @@ void ASTWriter::WriteBlockInfoBlock() { /// \return \c true if the path was changed. static bool cleanPathForOutput(FileManager &FileMgr, SmallVectorImpl &Path) { - bool Changed = false; - - if (!llvm::sys::path::is_absolute(StringRef(Path.data(), Path.size()))) { - llvm::sys::fs::make_absolute(Path); - Changed = true; - } - - return Changed | FileMgr.removeDotPaths(Path); + return FileMgr.makeAbsolutePath(Path) | FileMgr.removeDotPaths(Path); } /// \brief Adjusts the given filename to only write out the portion of the @@ -1429,7 +1422,7 @@ void ASTWriter::WriteControlBlock(Prepro SmallString<128> OutputPath(OutputFile); - llvm::sys::fs::make_absolute(OutputPath); + SM.getFileManager().makeAbsolutePath(OutputPath); StringRef origDir = llvm::sys::path::parent_path(OutputPath); RecordData Record; Added: cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/Test.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/Test.h?rev=243718&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/Test.h (added) +++ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Headers/Test.h Thu Jul 30 19:58:32 2015 @@ -0,0 +1 @@ +void test_me_call(void); Added: cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/module.modulemap?rev=243718&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/working-dir-test/Test.framework/Modules/module.modulemap Thu Jul 30 19:58:32 2015 @@ -0,0 +1,6 @@ +framework module Test { + umbrella header "Test.h" + + export * + module * { export * } +} Added: cfe/trunk/test/Modules/working-dir-flag.m URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/working-dir-flag.m?rev=243718&view=auto ============================================================================== --- cfe/trunk/test/Modules/working-dir-flag.m (added) +++ cfe/trunk/test/Modules/working-dir-flag.m Thu Jul 30 19:58:32 2015 @@ -0,0 +1,9 @@ +// RUN: rm -rf %t.mcp +// RUN: %clang_cc1 -fmodules-cache-path=%t.mcp -fmodules -fimplicit-module-maps -F . -working-directory=%S/Inputs/working-dir-test %s -verify +// expected-no-diagnostics + +@import Test; + +void foo() { + test_me_call(); +} _______________________________________________ cfe-commits mailing list cfe-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits