https://github.com/ThunderKhan updated https://github.com/llvm/llvm-project/pull/224568
>From 6bf4f1b4d20fa2aaba597f9fe8741c79c3aee08b Mon Sep 17 00:00:00 2001 From: Ayan Khan <[email protected]> Date: Fri, 18 Sep 2026 16:00:35 +0530 Subject: [PATCH 1/2] [clang][Tooling] Fix target option detection --- clang/lib/Tooling/Tooling.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp index 71307d1fe7307..229e86a1b2709 100644 --- a/clang/lib/Tooling/Tooling.cpp +++ b/clang/lib/Tooling/Tooling.cpp @@ -290,8 +290,12 @@ void addTargetAndModeForProgramName(std::vector<std::string> &CommandLine, for (auto Token = ++CommandLine.begin(); Token != CommandLine.end(); ++Token) { StringRef TokenRef(*Token); - ShouldAddTarget = ShouldAddTarget && !TokenRef.starts_with(TargetOPT) && - TokenRef != TargetOPTLegacy; + const bool HasTargetOption = + TokenRef == TargetOPT || TokenRef == TargetOPTLegacy || + (TokenRef.starts_with(TargetOPT) && + TokenRef.size() > TargetOPT.size() && + TokenRef[TargetOPT.size()] == '='); + ShouldAddTarget = ShouldAddTarget && !HasTargetOption; ShouldAddMode = ShouldAddMode && !TokenRef.starts_with(DriverModeOPT); } if (ShouldAddMode) { >From 0ca651b8d9e147db3650b900a7ee105fdeae6f2b Mon Sep 17 00:00:00 2001 From: Ayan Khan <[email protected]> Date: Fri, 18 Sep 2026 16:00:46 +0530 Subject: [PATCH 2/2] [clang][Tooling] Add target suboption regression test --- clang/unittests/Tooling/ToolingTest.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/clang/unittests/Tooling/ToolingTest.cpp b/clang/unittests/Tooling/ToolingTest.cpp index 11a5491dd35fb..01e324058f10d 100644 --- a/clang/unittests/Tooling/ToolingTest.cpp +++ b/clang/unittests/Tooling/ToolingTest.cpp @@ -996,6 +996,18 @@ TEST(addTargetAndModeForProgramName, IgnoresExistingTarget) { ArgsAlt); } + +TEST(addTargetAndModeForProgramName, DoesNotConfuseTargetSuboptions) { + llvm::InitializeAllTargets(); + std::string Target = getAnyTargetForTesting(); + ASSERT_FALSE(Target.empty()); + + std::vector<std::string> Args = { + "clang", "--target-cpu=cortex-a53", "-foo"}; + addTargetAndModeForProgramName(Args, Target + "-g++"); + + EXPECT_TRUE(llvm::is_contained(Args, "--target=" + Target)); +} TEST(addTargetAndModeForProgramName, IgnoresExistingMode) { llvm::InitializeAllTargets(); std::string Target = getAnyTargetForTesting(); _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
