Index: clang/lib/Lex/HeaderSearch.cpp =================================================================== --- clang/lib/Lex/HeaderSearch.cpp +++ clang/lib/Lex/HeaderSearch.cpp @@ -1678,9 +1678,8 @@ StringRef Dir = SearchDirs[I].getDir()->getName(); llvm::SmallString<32> DirPath(Dir.begin(), Dir.end()); if (!WorkingDir.empty() && !path::is_absolute(Dir)) { - auto err = fs::make_absolute(WorkingDir, DirPath); - if (!err) - path::remove_dots(DirPath, /*remove_dot_dot=*/true); + fs::make_absolute(WorkingDir, DirPath); + path::remove_dots(DirPath, /*remove_dot_dot=*/true); Dir = DirPath; } for (auto NI = path::begin(File), NE = path::end(File), Index: llvm/include/llvm/Support/FileSystem.h =================================================================== --- llvm/include/llvm/Support/FileSystem.h +++ llvm/include/llvm/Support/FileSystem.h @@ -302,10 +302,7 @@ /// relative/../path => /relative/../path /// /// @param path A path that is modified to be an absolute path. -/// @returns errc::success if \a path has been made absolute, otherwise a -/// platform-specific error_code. -std::error_code make_absolute(const Twine ¤t_directory, - SmallVectorImpl &path); +void make_absolute(const Twine ¤t_directory, SmallVectorImpl &path); /// Make \a path an absolute path. /// Index: llvm/lib/Support/Path.cpp =================================================================== --- llvm/lib/Support/Path.cpp +++ llvm/lib/Support/Path.cpp @@ -849,9 +849,8 @@ return createTemporaryFile(Prefix, Suffix, Dummy, ResultPath, FS_Name); } -static std::error_code make_absolute(const Twine ¤t_directory, - SmallVectorImpl &path, - bool use_current_directory) { +void make_absolute(const Twine ¤t_directory, + SmallVectorImpl &path) { StringRef p(path.data(), path.size()); bool rootDirectory = path::has_root_directory(p); @@ -860,14 +859,11 @@ // Already absolute. if (rootName && rootDirectory) - return std::error_code(); + return; // All of the following conditions will need the current directory. SmallString<128> current_dir; - if (use_current_directory) - current_directory.toVector(current_dir); - else if (std::error_code ec = current_path(current_dir)) - return ec; + current_directory.toVector(current_dir); // Relative path. Prepend the current directory. if (!rootName && !rootDirectory) { @@ -875,7 +871,7 @@ path::append(current_dir, p); // Set path to the result. path.swap(current_dir); - return std::error_code(); + return; } if (!rootName && rootDirectory) { @@ -884,7 +880,7 @@ path::append(curDirRootName, p); // Set path to the result. path.swap(curDirRootName); - return std::error_code(); + return; } if (rootName && !rootDirectory) { @@ -896,20 +892,23 @@ SmallString<128> res; path::append(res, pRootName, bRootDirectory, bRelativePath, pRelativePath); path.swap(res); - return std::error_code(); + return; } llvm_unreachable("All rootName and rootDirectory combinations should have " "occurred above!"); } -std::error_code make_absolute(const Twine ¤t_directory, - SmallVectorImpl &path) { - return make_absolute(current_directory, path, true); -} - std::error_code make_absolute(SmallVectorImpl &path) { - return make_absolute(Twine(), path, false); + if (path::is_absolute(path)) + return {}; + + SmallString<128> current_dir; + if (std::error_code ec = current_path(current_dir)) + return ec; + + make_absolute(current_dir, path); + return {}; } std::error_code create_directories(const Twine &Path, bool IgnoreExisting, Index: llvm/lib/Support/VirtualFileSystem.cpp =================================================================== --- llvm/lib/Support/VirtualFileSystem.cpp +++ llvm/lib/Support/VirtualFileSystem.cpp @@ -128,7 +128,8 @@ if (!WorkingDir) return WorkingDir.getError(); - return llvm::sys::fs::make_absolute(WorkingDir.get(), Path); + llvm::sys::fs::make_absolute(WorkingDir.get(), Path); + return {}; } std::error_code FileSystem::getRealPath(const Twine &Path, Index: llvm/tools/llvm-opt-report/OptReport.cpp =================================================================== --- llvm/tools/llvm-opt-report/OptReport.cpp +++ llvm/tools/llvm-opt-report/OptReport.cpp @@ -231,13 +231,8 @@ bool FirstFile = true; for (auto &FI : LocationInfo) { SmallString<128> FileName(FI.first); - if (!InputRelDir.empty()) { - if (std::error_code EC = sys::fs::make_absolute(InputRelDir, FileName)) { - WithColor::error() << "Can't resolve file path to " << FileName << ": " - << EC.message() << "\n"; - return false; - } - } + if (!InputRelDir.empty()) + sys::fs::make_absolute(InputRelDir, FileName); const auto &FileInfo = FI.second; Index: llvm/unittests/Support/Path.cpp =================================================================== --- llvm/unittests/Support/Path.cpp +++ llvm/unittests/Support/Path.cpp @@ -187,7 +187,7 @@ } SmallString<32> Relative("foo.cpp"); - ASSERT_NO_ERROR(sys::fs::make_absolute("/root", Relative)); + sys::fs::make_absolute("/root", Relative); Relative[5] = '/'; // Fix up windows paths. ASSERT_EQ("/root/foo.cpp", Relative); }