[clang] [clang-scan-deps] Don't inspect Args[0] as an option (PR #109050)
Martin Storsjö via cfe-commits
cfe-commits at lists.llvm.org
Thu Sep 19 04:23:07 PDT 2024
https://github.com/mstorsjo updated https://github.com/llvm/llvm-project/pull/109050
>From d7f46152baa1cffea16805bf7b522a237a54918f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Martin=20Storsj=C3=B6?= <martin at martin.st>
Date: Wed, 18 Sep 2024 00:03:00 +0300
Subject: [PATCH] [clang-scan-deps] Don't inspect Args[0] as an option
Since a26ec542371652e1d774696e90016fd5b0b1c191, we expand the
executable name to an absolute path, if it isn't already one,
if found in path.
This broke a couple tests in some environments; when the clang
workdir resides in a path under e.g. /opt. Tests that only use
a tool name like "clang-cl" would get expanded to the absolute
path in the build tree. The loop for finding the last "-o" like
option for clang-cl command lines would inspect all arguments,
including Args[0] which is the executable name itself. As an
/opt path matches Arg.starts_with("/o"), this would get detected
as an object file output name in cases where there was no other
explicit output argument.
Thus, this fixes those tests in workdirs under e.g. /opt.
---
clang/tools/clang-scan-deps/ClangScanDeps.cpp | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
index ac68e3605a10cb..b642a37c79e980 100644
--- a/clang/tools/clang-scan-deps/ClangScanDeps.cpp
+++ b/clang/tools/clang-scan-deps/ClangScanDeps.cpp
@@ -837,7 +837,12 @@ int clang_scan_deps_main(int argc, char **argv, const llvm::ToolContext &) {
// Reverse scan, starting at the end or at the element before "--".
auto R = std::make_reverse_iterator(FlagsEnd);
- for (auto I = R, E = Args.rend(); I != E; ++I) {
+ auto E = Args.rend();
+ // Don't include Args[0] in the iteration; that's the executable, not
+ // an option.
+ if (E != R)
+ E--;
+ for (auto I = R; I != E; ++I) {
StringRef Arg = *I;
if (ClangCLMode) {
// Ignore arguments that are preceded by "-Xclang".
More information about the cfe-commits
mailing list