diff options
author | Martin Storsjö <martin@martin.st> | 2024-09-19 20:46:09 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-19 20:46:09 +0300 |
commit | cead9044a995910306e2e64b426fcc8042d7e0ef (patch) | |
tree | ea7c3f5e6134bae3e594457e09986d370b9f6484 | |
parent | 0265981b6ec0f46fc372897fef7f945d8f4625c2 (diff) | |
download | llvm-cead9044a995910306e2e64b426fcc8042d7e0ef.zip llvm-cead9044a995910306e2e64b426fcc8042d7e0ef.tar.gz llvm-cead9044a995910306e2e64b426fcc8042d7e0ef.tar.bz2 |
[clang-scan-deps] Don't inspect Args[0] as an option (#109050)
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.
-rw-r--r-- | clang/tools/clang-scan-deps/ClangScanDeps.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/clang/tools/clang-scan-deps/ClangScanDeps.cpp b/clang/tools/clang-scan-deps/ClangScanDeps.cpp index ac68e360..b642a37 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". |