diff --git a/llvm/lib/Support/Path.cpp b/llvm/lib/Support/Path.cpp --- a/llvm/lib/Support/Path.cpp +++ b/llvm/lib/Support/Path.cpp @@ -1212,9 +1212,7 @@ std::error_code RemoveEC; if (Remove && !TmpName.empty()) { RemoveEC = fs::remove(TmpName); -#ifndef _WIN32 sys::DontRemoveFileOnSignal(TmpName); -#endif if (!RemoveEC) TmpName = ""; } else { @@ -1260,8 +1258,8 @@ if (RenameEC) remove(TmpName); } - sys::DontRemoveFileOnSignal(TmpName); #endif + sys::DontRemoveFileOnSignal(TmpName); if (!RenameEC) TmpName = ""; @@ -1283,9 +1281,8 @@ auto H = reinterpret_cast(_get_osfhandle(FD)); if (std::error_code EC = setDeleteDisposition(H, false)) return errorCodeToError(EC); -#else - sys::DontRemoveFileOnSignal(TmpName); #endif + sys::DontRemoveFileOnSignal(TmpName); TmpName = ""; @@ -1309,17 +1306,20 @@ TempFile Ret(ResultPath, FD); #ifdef _WIN32 auto H = reinterpret_cast(_get_osfhandle(FD)); + bool SetSignalHandler = false; if (std::error_code EC = setDeleteDisposition(H, true)) { Ret.RemoveOnClose = true; + SetSignalHandler = true; } #else - if (sys::RemoveFileOnSignal(ResultPath)) { + bool SetSignalHandler = true; +#endif + if (SetSignalHandler && sys::RemoveFileOnSignal(ResultPath)) { // Make sure we delete the file when RemoveFileOnSignal fails. consumeError(Ret.discard()); std::error_code EC(errc::operation_not_permitted); return errorCodeToError(EC); } -#endif return std::move(Ret); } } // namespace fs