diff --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc index c1dac918635a..52284d94f1ae 100644 --- a/llvm/lib/Support/Windows/Path.inc +++ b/llvm/lib/Support/Windows/Path.inc @@ -399,8 +399,15 @@ error_code remove(const Twine &path, bool &existed) { SmallVector path_utf16; file_status st; - if (error_code ec = status(path, st)) - return ec; + error_code EC = status(path, st); + if (EC) { + if (EC == windows_error::file_not_found || + EC == windows_error::path_not_found) { + existed = false; + return error_code::success(); + } + return EC; + } if (error_code ec = UTF8ToUTF16(path.toStringRef(path_storage), path_utf16)) @@ -611,11 +618,9 @@ handle_status_error: Result = file_status(file_type::file_not_found); else if (EC == windows_error::sharing_violation) Result = file_status(file_type::type_unknown); - else { + else Result = file_status(file_type::status_error); - return EC; - } - return error_code::success(); + return EC; } error_code status(const Twine &path, file_status &result) { diff --git a/llvm/unittests/Support/Path.cpp b/llvm/unittests/Support/Path.cpp index c9a2fb278f0f..6f5992b063cf 100644 --- a/llvm/unittests/Support/Path.cpp +++ b/llvm/unittests/Support/Path.cpp @@ -240,6 +240,10 @@ TEST_F(FileSystemTest, TempFiles) { ASSERT_NO_ERROR(fs::remove(Twine(TempPath2), TempFileExists)); EXPECT_TRUE(TempFileExists); + error_code EC = fs::status(TempPath2.c_str(), B); + EXPECT_EQ(EC, errc::no_such_file_or_directory); + EXPECT_EQ(B.type(), fs::file_type::file_not_found); + // Make sure Temp2 doesn't exist. ASSERT_NO_ERROR(fs::exists(Twine(TempPath2), TempFileExists)); EXPECT_FALSE(TempFileExists);