[llvm] 225e14e - [Support][Windows] Use the original path if GetFinalPathNameByHandleW() failed (#87749)

via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 5 11:40:11 PDT 2024


Author: Dmitry Vasilyev
Date: 2024-04-05T22:40:07+04:00
New Revision: 225e14e5b6d64e1f63da39fa7fe31d2ebb08260d

URL: https://github.com/llvm/llvm-project/commit/225e14e5b6d64e1f63da39fa7fe31d2ebb08260d
DIFF: https://github.com/llvm/llvm-project/commit/225e14e5b6d64e1f63da39fa7fe31d2ebb08260d.diff

LOG: [Support][Windows] Use the original path if GetFinalPathNameByHandleW() failed (#87749)

The commit f11b056c (#76304) breaks `clang` and other tools if they are
used from a RAMDrive. `GetFinalPathNameByHandleW()` may return 0 and
GetLastError 0x28. This patch fixes that issue. Note `real_path()` uses
`openFileForRead()` but it reports the error only if failed to open a
file. Getting `RealPath` is optional functionality.

BTW, `sys::fs::real_path()` resolves not only symlinks, but also network
drives and virtual drives created by the `subst` tool. It may break an
automation. It is better to detect symlinks and resolve only symlinks.

Added: 
    

Modified: 
    llvm/lib/Support/Windows/Path.inc

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Support/Windows/Path.inc b/llvm/lib/Support/Windows/Path.inc
index 854d531ab371fc..4f0336a85daaa5 100644
--- a/llvm/lib/Support/Windows/Path.inc
+++ b/llvm/lib/Support/Windows/Path.inc
@@ -157,7 +157,9 @@ std::string getMainExecutable(const char *argv0, void *MainExecAddr) {
 
   SmallString<256> RealPath;
   sys::fs::real_path(PathNameUTF8, RealPath);
-  return std::string(RealPath);
+  if (RealPath.size())
+    return std::string(RealPath);
+  return std::string(PathNameUTF8.data());
 }
 
 UniqueID file_status::getUniqueID() const {


        


More information about the llvm-commits mailing list