From: Kadir Cetinkaya Date: Thu, 13 May 2021 18:56:04 +0000 (+0200) Subject: [clangd][QueryDriver] Dont check for existence of driver X-Git-Tag: llvmorg-14-init~6443 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ec2f7376e39fa5d820d059b6e83e69690fe6315f;p=platform%2Fupstream%2Fllvm.git [clangd][QueryDriver] Dont check for existence of driver Execute implementations already checks for permissions and existence and returns relevant errors as necessary, so instead of printing our own errors, we just print theirs. This also fixes a case in windows where the driver might be missing the `.exe` suffix. Previously, clangd would reject such a driver because sys::fs::exists is strict, whereas the underlying Execute implementation would check with `.exe` suffix too. Fixes https://github.com/clangd/clangd/issues/93 Differential Revision: https://reviews.llvm.org/D102431 --- diff --git a/clang-tools-extra/clangd/QueryDriverDatabase.cpp b/clang-tools-extra/clangd/QueryDriverDatabase.cpp index 94faec9f..9704cb8 100644 --- a/clang-tools-extra/clangd/QueryDriverDatabase.cpp +++ b/clang-tools-extra/clangd/QueryDriverDatabase.cpp @@ -164,15 +164,6 @@ extractSystemIncludesAndTarget(llvm::SmallString<128> Driver, return llvm::None; } - if (!llvm::sys::fs::exists(Driver)) { - elog("System include extraction: {0} does not exist.", Driver); - return llvm::None; - } - if (!llvm::sys::fs::can_execute(Driver)) { - elog("System include extraction: {0} is not executable.", Driver); - return llvm::None; - } - llvm::SmallString<128> StdErrPath; if (auto EC = llvm::sys::fs::createTemporaryFile("system-includes", "clangd", StdErrPath)) { @@ -219,11 +210,13 @@ extractSystemIncludesAndTarget(llvm::SmallString<128> Driver, } } + std::string ErrMsg; if (int RC = llvm::sys::ExecuteAndWait(Driver, Args, /*Env=*/llvm::None, - Redirects)) { + Redirects, /*SecondsToWait=*/0, + /*MemoryLimit=*/0, &ErrMsg)) { elog("System include extraction: driver execution failed with return code: " - "{0}. Args: [{1}]", - llvm::to_string(RC), printArgv(Args)); + "{0} - '{1}'. Args: [{2}]", + llvm::to_string(RC), ErrMsg, printArgv(Args)); return llvm::None; }