diff --git a/lib/Support/Unix/PathV2.inc b/lib/Support/Unix/PathV2.inc index df8841220b5..68c17d534cd 100644 --- a/lib/Support/Unix/PathV2.inc +++ b/lib/Support/Unix/PathV2.inc @@ -296,7 +296,14 @@ bool can_execute(const Twine &Path) { SmallString<128> PathStorage; StringRef P = Path.toNullTerminatedStringRef(PathStorage); - return ::access(P.begin(), X_OK) != -1; + if (0 != access(P.begin(), R_OK | X_OK)) + return false; + struct stat buf; + if (0 != stat(P.begin(), &buf)) + return false; + if (!S_ISREG(buf.st_mode)) + return false; + return true; } bool equivalent(file_status A, file_status B) {