https://github.com/carlocab updated 
https://github.com/llvm/llvm-project/pull/186683

>From a26f1dca4862d3f46e61c04aa9daf849db870f17 Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Tue, 17 Mar 2026 19:12:22 +0800
Subject: [PATCH 1/8] [clang][Driver][Darwin] Use `xcselect` for
 `*-apple-darwin*` targets too

This is a follow-up to #119670. There, we introduced a CMake option
`CLANG_USE_XCSELECT`, which, when enabled, uses `libxcselect` to find
the right SDK to inject as an `-isysroot` flag when targeting
`*-apple-macos*`.

We intentionally left out `*-apple-darwin*` targets because it broke
many tests. This is unfortunate because `*-apple-darwin*` is the default
triple when building LLVM on macOS, so one isn't able to take advantage
of `xcselect` without an explicit `-target` flag or a change to the
toolchain's default target.

We fix this in two ways.

First, we move the injection of the `-isysroot` flag using `xcselect`
later, until after we are sure that we are targeting macOS. This avoids
confusing the earlier deployment target detection code when we inject
the macOS SDK but actually intended to target non-macOS.

Second, we introduce a `--no-xcselect` flag. This is useful to avoid
breaking some tests that assume clang is invoked without an `-isysroot`
flag pointing at a macOS SDK.
---
 clang/include/clang/Options/Options.td        |  2 ++
 clang/lib/Driver/ToolChains/Darwin.cpp        | 27 ++++++++-------
 clang/test/Driver/darwin-builtin-modules.c    |  3 +-
 .../Driver/darwin-header-search-system.cpp    |  4 +++
 .../darwin-ld-platform-version-macos-nosdk.c  | 17 ----------
 .../Driver/darwin-ld-platform-version-macos.c | 13 ++++++++
 clang/test/Driver/fsanitize-ignorelist.c      |  3 +-
 clang/test/Driver/xcselect.c                  | 33 +++++++++++++++++--
 8 files changed, 68 insertions(+), 34 deletions(-)
 delete mode 100644 clang/test/Driver/darwin-ld-platform-version-macos-nosdk.c

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 03353a31221f3..379fbd8c11f62 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -1341,6 +1341,8 @@ def no_cuda_version_check : Flag<["--"], 
"no-cuda-version-check">,
   HelpText<"Don't error out if the detected version of the CUDA install is "
            "too low for the requested CUDA gpu architecture.">;
 def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">;
+def no_xcselect : Flag<["--"], "no-xcselect">,
+  HelpText<"Disable xcselect SDK injection on macOS">;
 def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>,
   HelpText<"CUDA installation path">;
 def cuda_path_ignore_env : Flag<["--"], "cuda-path-ignore-env">, 
Group<i_Group>,
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index 7251f4a92d92d..4cc0653299807 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2501,18 +2501,6 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
           nullptr, Opts.getOption(options::OPT_isysroot), env));
     }
   }
-#ifdef CLANG_USE_XCSELECT
-  // FIXME: This should check for `getTriple().isMacOSX()`, but this breaks
-  // many tests. See https://github.com/llvm/llvm-project/pull/119670.
-  else if (getTriple().getOS() == llvm::Triple::MacOSX) {
-    char *p;
-    if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
-      Args.append(Args.MakeSeparateArg(
-          nullptr, Opts.getOption(options::OPT_isysroot), p));
-      ::free(p);
-    }
-  }
-#endif
 
   // Read the SDKSettings.json file for more information, like the SDK version
   // that we can pass down to the compiler.
@@ -2651,6 +2639,21 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
   const std::string OSVersionStr = OSVersion.getAsString();
   // Set the tool chain target information.
   if (Platform == MacOS) {
+#ifdef CLANG_USE_XCSELECT
+    // If we don't have an SDK yet and are on macOS, try to inject one using
+    // xcselect, except when passed --no-xcselect.
+    if (!Args.hasArg(options::OPT_no_xcselect) &&
+        !Args.getLastArg(options::OPT_isysroot) && !::getenv("SDKROOT") &&
+        !SDKInfo) {
+      char *p;
+      if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
+        Args.append(Args.MakeSeparateArg(
+            nullptr, Opts.getOption(options::OPT_isysroot), p));
+        ::free(p);
+        SDKInfo = parseSDKSettings(getVFS(), Args, getDriver());
+      }
+    }
+#endif
     if (!Driver::GetReleaseVersion(OSVersionStr, Major, Minor, Micro,
                                    HadExtra) ||
         HadExtra || Major < 10 || Major >= MajorVersionLimit || Minor >= 100 ||
diff --git a/clang/test/Driver/darwin-builtin-modules.c 
b/clang/test/Driver/darwin-builtin-modules.c
index f4c9220b8d577..e643718e95df9 100644
--- a/clang/test/Driver/darwin-builtin-modules.c
+++ b/clang/test/Driver/darwin-builtin-modules.c
@@ -1,7 +1,8 @@
 // Check that darwin passes -fbuiltin-headers-in-system-modules
 // when expected.
 
-// RUN: %clang -target x86_64-apple-darwin22.4 -### %s 2>&1 | FileCheck 
--check-prefix=CHECK_OLD %s
+// Pass --no-xcselect to avoid injecting an SDK that supports builtin modules.
+// RUN: %clang -target x86_64-apple-darwin22.4 --no-xcselect -### %s 2>&1 | 
FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/MacOSX10.15.sdk -target 
x86_64-apple-macos10.15 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/iPhoneOS13.0.sdk -target 
arm64-apple-ios13.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // CHECK_OLD: -fbuiltin-headers-in-system-modules
diff --git a/clang/test/Driver/darwin-header-search-system.cpp 
b/clang/test/Driver/darwin-header-search-system.cpp
index 5fb83b62ce7e6..579ee197ec21b 100644
--- a/clang/test/Driver/darwin-header-search-system.cpp
+++ b/clang/test/Driver/darwin-header-search-system.cpp
@@ -15,8 +15,10 @@
 // RUN:               -DRESOURCE=%S/Inputs/resource_dir \
 // RUN:               --check-prefix=CHECK-SYSTEM %s
 //
+// Pass --no-xcselect to ensure xcselect does not inject an -isysroot flag.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \
 // RUN:     --target=x86_64-apple-darwin \
+// RUN:     --no-xcselect \
 // RUN:     -ccc-install-dir 
%S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:     --sysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \
@@ -91,8 +93,10 @@
 
 // Check search paths without -isysroot
 //
+// Pass --no-xcselect to ensure xcselect does not inject an -isysroot flag.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \
 // RUN:     --target=x86_64-apple-darwin \
+// RUN:     --no-xcselect \
 // RUN:     -ccc-install-dir 
%S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:     --sysroot="" \
diff --git a/clang/test/Driver/darwin-ld-platform-version-macos-nosdk.c 
b/clang/test/Driver/darwin-ld-platform-version-macos-nosdk.c
deleted file mode 100644
index 76f601a2f2679..0000000000000
--- a/clang/test/Driver/darwin-ld-platform-version-macos-nosdk.c
+++ /dev/null
@@ -1,17 +0,0 @@
-// UNSUPPORTED: xcselect
-// CLANG_USE_XCSELECT will always have an SDK inferred.
-
-// RUN: touch %t.o
-
-// RUN: %clang -target x86_64-apple-macos10.13 -mlinker-version=520 \
-// RUN:   -### %t.o 2>&1 \
-// RUN:   | FileCheck --check-prefix=NOSDK %s
-// RUN: %clang -target x86_64-apple-darwin17 -mlinker-version=520 \
-// RUN:   -### %t.o 2>&1 \
-// RUN:   | FileCheck --check-prefix=NOSDK %s
-// NOSDK: "-platform_version" "macos" "10.13.0" "10.13.0"
-
-// RUN: %clang -target arm64-apple-macos26 -mlinker-version=520 \
-// RUN:   -### %t.o 2>&1 \
-// RUN:   | FileCheck --check-prefix=VERSION_BUMP %s
-// VERSION_BUMP: "-platform_version" "macos" "26.0.0" "26.0.0"
diff --git a/clang/test/Driver/darwin-ld-platform-version-macos.c 
b/clang/test/Driver/darwin-ld-platform-version-macos.c
index 72c50d0b32b44..38ef087250bf7 100644
--- a/clang/test/Driver/darwin-ld-platform-version-macos.c
+++ b/clang/test/Driver/darwin-ld-platform-version-macos.c
@@ -40,3 +40,16 @@
 // ARM64_NEW: "-platform_version" "macos" "11.0.0" "10.15"
 // ARM64_NEW_1: "-platform_version" "macos" "11.1.0" "10.15"
 // ARM64_OLD: "-macosx_version_min" "11.0.0"
+
+// RUN: %clang -target x86_64-apple-macos10.13 -mlinker-version=520 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   | FileCheck --check-prefix=NOSDK %s
+// RUN: %clang -target x86_64-apple-darwin17 -mlinker-version=520 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   | FileCheck --check-prefix=NOSDK %s
+// NOSDK: "-platform_version" "macos" "10.13.0" "10.13.0"
+
+// RUN: %clang -target arm64-apple-macos26 -mlinker-version=520 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   | FileCheck --check-prefix=VERSION_BUMP %s
+// VERSION_BUMP: "-platform_version" "macos" "26.0.0" "26.0.0"
diff --git a/clang/test/Driver/fsanitize-ignorelist.c 
b/clang/test/Driver/fsanitize-ignorelist.c
index 7dd666a453198..1c40900b0fb50 100644
--- a/clang/test/Driver/fsanitize-ignorelist.c
+++ b/clang/test/Driver/fsanitize-ignorelist.c
@@ -25,7 +25,8 @@
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// RUN: %clang --target=%itanium_abi_triple -fsanitize=float-divide-by-zero 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// The driver injects -fdepfile-entry=/path/to/SDKSettings.json when xcselect 
is active.
+// RUN: %clang --target=%itanium_abi_triple --no-xcselect 
-fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 
2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // CHECK-DEFAULT-UBSAN-IGNORELIST: 
-fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
 
 // Check that combining ubsan and another sanitizer results in both 
ignorelists being used.
diff --git a/clang/test/Driver/xcselect.c b/clang/test/Driver/xcselect.c
index 01cd4aca5ec23..7ce5736ca43e0 100644
--- a/clang/test/Driver/xcselect.c
+++ b/clang/test/Driver/xcselect.c
@@ -1,5 +1,32 @@
 // REQUIRES: xcselect
-// RUN: %clang -target arm64-apple-macosx -c -### %s 2> %t.log
-// RUN: FileCheck %s <%t.log
 
-// CHECK: "-isysroot" "{{.*}}/SDKs/MacOSX{{([0-9]+(\.[0-9]+)?)?}}.sdk"
+// xcselect injects -isysroot for -macosx triples.
+// RUN: %clang -target arm64-apple-macosx -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+// RUN: %clang -target arm64-apple-macosx15 -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+// RUN: %clang -target arm64-apple-macos -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+// RUN: %clang -target arm64-apple-macos26 -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+// RUN: %clang -target x86_64-apple-darwin -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+// RUN: %clang -target arm64-apple-darwin20 -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=SDK %s
+
+// SDK: "-isysroot" "{{.*}}/SDKs/MacOSX{{([0-9]+(\.[0-9]+)?)?}}.sdk"
+
+// RUN: %clang -target arm64-apple-macosx -c --no-xcselect -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=NO-SDK %s
+// RUN: %clang -target armv7-apple-darwin10 -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=NO-SDK %s
+// RUN: %clang -target arm64-apple-ios18 -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=NO-SDK %s
+// RUN: %clang -target arm64-apple-darwin -mios-simulator-version-min=15.0 \
+// RUN:   -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=NO-SDK %s
+// RUN: env IPHONEOS_DEPLOYMENT_TARGET=14.0 \
+// RUN:   %clang -target x86_64-apple-darwin -c -### %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=NO-SDK %s
+
+// NO-SDK-NOT: "-isysroot"

>From 365ffcf3dcab89030f5827695d32cf96cbd9e8ea Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 00:53:31 +0800
Subject: [PATCH 2/8] Use a bool flag to track whether we should try xcselect

---
 clang/lib/Driver/ToolChains/Darwin.cpp | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index 4cc0653299807..244697855d386 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2484,6 +2484,7 @@ std::optional<DarwinSDKInfo> 
parseSDKSettings(llvm::vfs::FileSystem &VFS,
 
 void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
   const OptTable &Opts = getDriver().getOpts();
+  bool TryXcselect = false;
 
   // Support allowing the SDKROOT environment variable used by xcrun and other
   // Xcode tools to define the default sysroot, by making it the default for
@@ -2500,6 +2501,9 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
       Args.append(Args.MakeSeparateArg(
           nullptr, Opts.getOption(options::OPT_isysroot), env));
     }
+  } else {
+    TryXcselect = !Args.getLastArg(options::OPT__sysroot_EQ) &&
+                  !Args.getLastArg(options::OPT_no_xcselect);
   }
 
   // Read the SDKSettings.json file for more information, like the SDK version
@@ -2642,9 +2646,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
 #ifdef CLANG_USE_XCSELECT
     // If we don't have an SDK yet and are on macOS, try to inject one using
     // xcselect, except when passed --no-xcselect.
-    if (!Args.hasArg(options::OPT_no_xcselect) &&
-        !Args.getLastArg(options::OPT_isysroot) && !::getenv("SDKROOT") &&
-        !SDKInfo) {
+    if (TryXcselect && !SDKInfo) {
       char *p;
       if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
         Args.append(Args.MakeSeparateArg(

>From 6f95ff67d6388f28afbea555e9ba76b4e8cf08cc Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 01:02:41 +0800
Subject: [PATCH 3/8] Rename `--no-xcselect` to `--no-sysroot`

We can also remove some of these extra `--no-xcselect` flags because we
skip xcselect when `--sysroot` is passed.
---
 clang/include/clang/Options/Options.td               | 2 +-
 clang/lib/Driver/ToolChains/Darwin.cpp               | 4 ++--
 clang/test/Driver/darwin-builtin-modules.c           | 4 ++--
 clang/test/Driver/darwin-header-search-system.cpp    | 4 ----
 clang/test/Driver/darwin-ld-platform-version-macos.c | 6 +++---
 clang/test/Driver/fsanitize-ignorelist.c             | 4 ++--
 clang/test/Driver/xcselect.c                         | 2 +-
 7 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 379fbd8c11f62..0e947befaacc6 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -1341,7 +1341,7 @@ def no_cuda_version_check : Flag<["--"], 
"no-cuda-version-check">,
   HelpText<"Don't error out if the detected version of the CUDA install is "
            "too low for the requested CUDA gpu architecture.">;
 def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">;
-def no_xcselect : Flag<["--"], "no-xcselect">,
+def no_sysroot : Flag<["--"], "no-sysroot">,
   HelpText<"Disable xcselect SDK injection on macOS">;
 def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>,
   HelpText<"CUDA installation path">;
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index 244697855d386..fa55746fe0e99 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2503,7 +2503,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
     }
   } else {
     TryXcselect = !Args.getLastArg(options::OPT__sysroot_EQ) &&
-                  !Args.getLastArg(options::OPT_no_xcselect);
+                  !Args.getLastArg(options::OPT_no_sysroot);
   }
 
   // Read the SDKSettings.json file for more information, like the SDK version
@@ -2645,7 +2645,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
   if (Platform == MacOS) {
 #ifdef CLANG_USE_XCSELECT
     // If we don't have an SDK yet and are on macOS, try to inject one using
-    // xcselect, except when passed --no-xcselect.
+    // xcselect, except when passed --no-sysroot.
     if (TryXcselect && !SDKInfo) {
       char *p;
       if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
diff --git a/clang/test/Driver/darwin-builtin-modules.c 
b/clang/test/Driver/darwin-builtin-modules.c
index e643718e95df9..557ed125f0f7b 100644
--- a/clang/test/Driver/darwin-builtin-modules.c
+++ b/clang/test/Driver/darwin-builtin-modules.c
@@ -1,8 +1,8 @@
 // Check that darwin passes -fbuiltin-headers-in-system-modules
 // when expected.
 
-// Pass --no-xcselect to avoid injecting an SDK that supports builtin modules.
-// RUN: %clang -target x86_64-apple-darwin22.4 --no-xcselect -### %s 2>&1 | 
FileCheck --check-prefix=CHECK_OLD %s
+// Pass --no-sysroot to avoid injecting an SDK that supports builtin modules.
+// RUN: %clang -target x86_64-apple-darwin22.4 --no-sysroot -### %s 2>&1 | 
FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/MacOSX10.15.sdk -target 
x86_64-apple-macos10.15 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/iPhoneOS13.0.sdk -target 
arm64-apple-ios13.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // CHECK_OLD: -fbuiltin-headers-in-system-modules
diff --git a/clang/test/Driver/darwin-header-search-system.cpp 
b/clang/test/Driver/darwin-header-search-system.cpp
index 579ee197ec21b..5fb83b62ce7e6 100644
--- a/clang/test/Driver/darwin-header-search-system.cpp
+++ b/clang/test/Driver/darwin-header-search-system.cpp
@@ -15,10 +15,8 @@
 // RUN:               -DRESOURCE=%S/Inputs/resource_dir \
 // RUN:               --check-prefix=CHECK-SYSTEM %s
 //
-// Pass --no-xcselect to ensure xcselect does not inject an -isysroot flag.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \
 // RUN:     --target=x86_64-apple-darwin \
-// RUN:     --no-xcselect \
 // RUN:     -ccc-install-dir 
%S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:     --sysroot %S/Inputs/basic_darwin_sdk_usr_and_usr_local \
@@ -93,10 +91,8 @@
 
 // Check search paths without -isysroot
 //
-// Pass --no-xcselect to ensure xcselect does not inject an -isysroot flag.
 // RUN: %clang -### %s -fsyntax-only 2>&1 \
 // RUN:     --target=x86_64-apple-darwin \
-// RUN:     --no-xcselect \
 // RUN:     -ccc-install-dir 
%S/Inputs/basic_darwin_toolchain_no_libcxx/usr/bin \
 // RUN:     -resource-dir=%S/Inputs/resource_dir \
 // RUN:     --sysroot="" \
diff --git a/clang/test/Driver/darwin-ld-platform-version-macos.c 
b/clang/test/Driver/darwin-ld-platform-version-macos.c
index 38ef087250bf7..440eae2eaa8a8 100644
--- a/clang/test/Driver/darwin-ld-platform-version-macos.c
+++ b/clang/test/Driver/darwin-ld-platform-version-macos.c
@@ -42,14 +42,14 @@
 // ARM64_OLD: "-macosx_version_min" "11.0.0"
 
 // RUN: %clang -target x86_64-apple-macos10.13 -mlinker-version=520 \
-// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   --no-sysroot -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=NOSDK %s
 // RUN: %clang -target x86_64-apple-darwin17 -mlinker-version=520 \
-// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   --no-sysroot -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=NOSDK %s
 // NOSDK: "-platform_version" "macos" "10.13.0" "10.13.0"
 
 // RUN: %clang -target arm64-apple-macos26 -mlinker-version=520 \
-// RUN:   --no-xcselect -### %t.o 2>&1 \
+// RUN:   --no-sysroot -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=VERSION_BUMP %s
 // VERSION_BUMP: "-platform_version" "macos" "26.0.0" "26.0.0"
diff --git a/clang/test/Driver/fsanitize-ignorelist.c 
b/clang/test/Driver/fsanitize-ignorelist.c
index 1c40900b0fb50..6eee1dee1a188 100644
--- a/clang/test/Driver/fsanitize-ignorelist.c
+++ b/clang/test/Driver/fsanitize-ignorelist.c
@@ -25,8 +25,8 @@
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// The driver injects -fdepfile-entry=/path/to/SDKSettings.json when xcselect 
is active.
-// RUN: %clang --target=%itanium_abi_triple --no-xcselect 
-fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 
2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// Pass `--no-sysroot` to prevent the driver injecting 
-fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
+// RUN: %clang --target=%itanium_abi_triple --no-sysroot 
-fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 
2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // CHECK-DEFAULT-UBSAN-IGNORELIST: 
-fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
 
 // Check that combining ubsan and another sanitizer results in both 
ignorelists being used.
diff --git a/clang/test/Driver/xcselect.c b/clang/test/Driver/xcselect.c
index 7ce5736ca43e0..ac1c37a9152bc 100644
--- a/clang/test/Driver/xcselect.c
+++ b/clang/test/Driver/xcselect.c
@@ -16,7 +16,7 @@
 
 // SDK: "-isysroot" "{{.*}}/SDKs/MacOSX{{([0-9]+(\.[0-9]+)?)?}}.sdk"
 
-// RUN: %clang -target arm64-apple-macosx -c --no-xcselect -### %s 2>&1 | \
+// RUN: %clang -target arm64-apple-macosx -c --no-sysroot -### %s 2>&1 | \
 // RUN:   FileCheck --check-prefix=NO-SDK %s
 // RUN: %clang -target armv7-apple-darwin10 -c -### %s 2>&1 | \
 // RUN:   FileCheck --check-prefix=NO-SDK %s

>From c207da139a8b3dde42b09d9a0ed7391a21f88133 Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 01:12:34 +0800
Subject: [PATCH 4/8] Move `no_sysroot` definition to a more sensible location

I accidentally included this under the CUDA options.
---
 clang/include/clang/Options/Options.td | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 0e947befaacc6..669764a5195b1 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -1341,8 +1341,6 @@ def no_cuda_version_check : Flag<["--"], 
"no-cuda-version-check">,
   HelpText<"Don't error out if the detected version of the CUDA install is "
            "too low for the requested CUDA gpu architecture.">;
 def no_cuda_noopt_device_debug : Flag<["--"], "no-cuda-noopt-device-debug">;
-def no_sysroot : Flag<["--"], "no-sysroot">,
-  HelpText<"Disable xcselect SDK injection on macOS">;
 def cuda_path_EQ : Joined<["--"], "cuda-path=">, Group<i_Group>,
   HelpText<"CUDA installation path">;
 def cuda_path_ignore_env : Flag<["--"], "cuda-path-ignore-env">, 
Group<i_Group>,
@@ -6800,6 +6798,8 @@ def _help_hidden : Flag<["--"], "help-hidden">,
   HelpText<"Display help for hidden options">;
 def _sysroot_EQ : Joined<["--"], "sysroot=">, Visibility<[ClangOption, 
FlangOption]>;
 def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
+def no_sysroot : Flag<["--"], "no-sysroot">,
+  HelpText<"Disable xcselect SDK injection on macOS">;
 
 
//===----------------------------------------------------------------------===//
 // pie/pic options (clang + flang)

>From 9432443f8ecaa129fbe0b74b0c41d1e84a564d36 Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 01:21:07 +0800
Subject: [PATCH 5/8] Avoid unused variable warning

This variable is unused when `CLANG_USE_XCSELECT` is not defined, so
let's avoid it to prevent `-Werror` failures.
---
 clang/lib/Driver/ToolChains/Darwin.cpp | 1 +
 1 file changed, 1 insertion(+)

diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index fa55746fe0e99..55911f61338fe 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2485,6 +2485,7 @@ std::optional<DarwinSDKInfo> 
parseSDKSettings(llvm::vfs::FileSystem &VFS,
 void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
   const OptTable &Opts = getDriver().getOpts();
   bool TryXcselect = false;
+  (void)TryXcselect;
 
   // Support allowing the SDKROOT environment variable used by xcrun and other
   // Xcode tools to define the default sysroot, by making it the default for

>From 64a1d70524456982ba8888dfafd5449042c27386 Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 02:50:25 +0800
Subject: [PATCH 6/8] Revert the rename of `--no-xcselect` to `--no-sysroot`

---
 clang/include/clang/Options/Options.td               | 2 +-
 clang/lib/Driver/ToolChains/Darwin.cpp               | 4 ++--
 clang/test/Driver/darwin-builtin-modules.c           | 4 ++--
 clang/test/Driver/darwin-ld-platform-version-macos.c | 6 +++---
 clang/test/Driver/fsanitize-ignorelist.c             | 4 ++--
 clang/test/Driver/xcselect.c                         | 2 +-
 6 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/clang/include/clang/Options/Options.td 
b/clang/include/clang/Options/Options.td
index 669764a5195b1..01950784280ff 100644
--- a/clang/include/clang/Options/Options.td
+++ b/clang/include/clang/Options/Options.td
@@ -6798,7 +6798,7 @@ def _help_hidden : Flag<["--"], "help-hidden">,
   HelpText<"Display help for hidden options">;
 def _sysroot_EQ : Joined<["--"], "sysroot=">, Visibility<[ClangOption, 
FlangOption]>;
 def _sysroot : Separate<["--"], "sysroot">, Alias<_sysroot_EQ>;
-def no_sysroot : Flag<["--"], "no-sysroot">,
+def no_xcselect : Flag<["--"], "no-xcselect">,
   HelpText<"Disable xcselect SDK injection on macOS">;
 
 
//===----------------------------------------------------------------------===//
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index 55911f61338fe..be37e821b9c70 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2504,7 +2504,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
     }
   } else {
     TryXcselect = !Args.getLastArg(options::OPT__sysroot_EQ) &&
-                  !Args.getLastArg(options::OPT_no_sysroot);
+                  !Args.getLastArg(options::OPT_no_xcselect);
   }
 
   // Read the SDKSettings.json file for more information, like the SDK version
@@ -2646,7 +2646,7 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
   if (Platform == MacOS) {
 #ifdef CLANG_USE_XCSELECT
     // If we don't have an SDK yet and are on macOS, try to inject one using
-    // xcselect, except when passed --no-sysroot.
+    // xcselect, except when passed --no-xcselect.
     if (TryXcselect && !SDKInfo) {
       char *p;
       if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
diff --git a/clang/test/Driver/darwin-builtin-modules.c 
b/clang/test/Driver/darwin-builtin-modules.c
index 557ed125f0f7b..e643718e95df9 100644
--- a/clang/test/Driver/darwin-builtin-modules.c
+++ b/clang/test/Driver/darwin-builtin-modules.c
@@ -1,8 +1,8 @@
 // Check that darwin passes -fbuiltin-headers-in-system-modules
 // when expected.
 
-// Pass --no-sysroot to avoid injecting an SDK that supports builtin modules.
-// RUN: %clang -target x86_64-apple-darwin22.4 --no-sysroot -### %s 2>&1 | 
FileCheck --check-prefix=CHECK_OLD %s
+// Pass --no-xcselect to avoid injecting an SDK that supports builtin modules.
+// RUN: %clang -target x86_64-apple-darwin22.4 --no-xcselect -### %s 2>&1 | 
FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/MacOSX10.15.sdk -target 
x86_64-apple-macos10.15 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // RUN: %clang -isysroot %S/Inputs/iPhoneOS13.0.sdk -target 
arm64-apple-ios13.0 -### %s 2>&1 | FileCheck --check-prefix=CHECK_OLD %s
 // CHECK_OLD: -fbuiltin-headers-in-system-modules
diff --git a/clang/test/Driver/darwin-ld-platform-version-macos.c 
b/clang/test/Driver/darwin-ld-platform-version-macos.c
index 440eae2eaa8a8..38ef087250bf7 100644
--- a/clang/test/Driver/darwin-ld-platform-version-macos.c
+++ b/clang/test/Driver/darwin-ld-platform-version-macos.c
@@ -42,14 +42,14 @@
 // ARM64_OLD: "-macosx_version_min" "11.0.0"
 
 // RUN: %clang -target x86_64-apple-macos10.13 -mlinker-version=520 \
-// RUN:   --no-sysroot -### %t.o 2>&1 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=NOSDK %s
 // RUN: %clang -target x86_64-apple-darwin17 -mlinker-version=520 \
-// RUN:   --no-sysroot -### %t.o 2>&1 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=NOSDK %s
 // NOSDK: "-platform_version" "macos" "10.13.0" "10.13.0"
 
 // RUN: %clang -target arm64-apple-macos26 -mlinker-version=520 \
-// RUN:   --no-sysroot -### %t.o 2>&1 \
+// RUN:   --no-xcselect -### %t.o 2>&1 \
 // RUN:   | FileCheck --check-prefix=VERSION_BUMP %s
 // VERSION_BUMP: "-platform_version" "macos" "26.0.0" "26.0.0"
diff --git a/clang/test/Driver/fsanitize-ignorelist.c 
b/clang/test/Driver/fsanitize-ignorelist.c
index 6eee1dee1a188..33645955d548e 100644
--- a/clang/test/Driver/fsanitize-ignorelist.c
+++ b/clang/test/Driver/fsanitize-ignorelist.c
@@ -25,8 +25,8 @@
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=nullability 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=undefined 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // RUN: %clang --target=x86_64-linux-gnu -fsanitize=alignment 
-resource-dir=%S/Inputs/resource_dir %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
-// Pass `--no-sysroot` to prevent the driver injecting 
-fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
-// RUN: %clang --target=%itanium_abi_triple --no-sysroot 
-fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 
2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
+// Pass `--no-xcselect` to prevent the driver injecting 
-fdepfile-entry=<sysroot>/SDKSettings.json when xcselect is active.
+// RUN: %clang --target=%itanium_abi_triple --no-xcselect 
-fsanitize=float-divide-by-zero -resource-dir=%S/Inputs/resource_dir %s -### 
2>&1 | FileCheck %s --check-prefix=CHECK-DEFAULT-UBSAN-IGNORELIST 
--implicit-check-not=fdepfile-entry --implicit-check-not=-fsanitize-ignorelist=
 // CHECK-DEFAULT-UBSAN-IGNORELIST: 
-fsanitize-system-ignorelist={{.*}}ubsan_ignorelist.txt
 
 // Check that combining ubsan and another sanitizer results in both 
ignorelists being used.
diff --git a/clang/test/Driver/xcselect.c b/clang/test/Driver/xcselect.c
index ac1c37a9152bc..7ce5736ca43e0 100644
--- a/clang/test/Driver/xcselect.c
+++ b/clang/test/Driver/xcselect.c
@@ -16,7 +16,7 @@
 
 // SDK: "-isysroot" "{{.*}}/SDKs/MacOSX{{([0-9]+(\.[0-9]+)?)?}}.sdk"
 
-// RUN: %clang -target arm64-apple-macosx -c --no-sysroot -### %s 2>&1 | \
+// RUN: %clang -target arm64-apple-macosx -c --no-xcselect -### %s 2>&1 | \
 // RUN:   FileCheck --check-prefix=NO-SDK %s
 // RUN: %clang -target armv7-apple-darwin10 -c -### %s 2>&1 | \
 // RUN:   FileCheck --check-prefix=NO-SDK %s

>From 09c72d75f4fa9fa3e806c449626583ff631de159 Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 02:54:45 +0800
Subject: [PATCH 7/8] Relocate comment

---
 clang/lib/Driver/ToolChains/Darwin.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index be37e821b9c70..cb1d57db1e0a8 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2484,6 +2484,10 @@ std::optional<DarwinSDKInfo> 
parseSDKSettings(llvm::vfs::FileSystem &VFS,
 
 void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
   const OptTable &Opts = getDriver().getOpts();
+  // TryXcselect keeps track of whether we use xcselect to find the SDK
+  // when CLANG_USE_XCSELECT is enabled. Currently, we do this when we
+  // do not have a sysroot from -isysroot, --sysroot, or SDKROOT, and
+  // we do not have --no-xcselect.
   bool TryXcselect = false;
   (void)TryXcselect;
 
@@ -2645,8 +2649,6 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
   // Set the tool chain target information.
   if (Platform == MacOS) {
 #ifdef CLANG_USE_XCSELECT
-    // If we don't have an SDK yet and are on macOS, try to inject one using
-    // xcselect, except when passed --no-xcselect.
     if (TryXcselect && !SDKInfo) {
       char *p;
       if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {

>From e3868a14509c9ddc4f7785d230495335f4648f8f Mon Sep 17 00:00:00 2001
From: Carlo Cabrera <[email protected]>
Date: Wed, 18 Mar 2026 03:00:29 +0800
Subject: [PATCH 8/8] Allow using xcselect even if SDKInfo is set

---
 clang/lib/Driver/ToolChains/Darwin.cpp | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index cb1d57db1e0a8..1315c26cb0c73 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -2649,13 +2649,14 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) 
const {
   // Set the tool chain target information.
   if (Platform == MacOS) {
 #ifdef CLANG_USE_XCSELECT
-    if (TryXcselect && !SDKInfo) {
+    if (TryXcselect) {
       char *p;
       if (!::xcselect_host_sdk_path(CLANG_XCSELECT_HOST_SDK_POLICY, &p)) {
         Args.append(Args.MakeSeparateArg(
             nullptr, Opts.getOption(options::OPT_isysroot), p));
         ::free(p);
-        SDKInfo = parseSDKSettings(getVFS(), Args, getDriver());
+        if (!SDKInfo)
+          SDKInfo = parseSDKSettings(getVFS(), Args, getDriver());
       }
     }
 #endif

_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to