https://github.com/ThunderKhan updated 
https://github.com/llvm/llvm-project/pull/224568

>From ee0e155f9d526d6f599bdb8be3a25e3f9e6891be Mon Sep 17 00:00:00 2001
From: Ayan Khan <[email protected]>
Date: Fri, 18 Sep 2026 16:01:14 +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 71307d1fe73076..229e86a1b27099 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 49d97b4f7bbb20074a007c2540c80c7db5207cc3 Mon Sep 17 00:00:00 2001
From: Ayan Khan <[email protected]>
Date: Fri, 18 Sep 2026 16:01:27 +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 11a5491dd35fb1..01e324058f10d4 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

Reply via email to