[clang] Revert "[Darwin] Remove linker version checks for objc_msgSend selector stubs (#193637)" (PR #193828)

via cfe-commits cfe-commits at lists.llvm.org
Thu Apr 23 12:52:31 PDT 2026


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-clang-driver

Author: Akira Hatanaka (ahatanak)

<details>
<summary>Changes</summary>

This reverts commit a6ab955369ae401cec75ced651c52c2348f117ad.

The linker version checks cannot be removed yet. The commit broke builds that were using old linkers.

---
Full diff: https://github.com/llvm/llvm-project/pull/193828.diff


2 Files Affected:

- (modified) clang/lib/Driver/ToolChains/Darwin.cpp (+4-2) 
- (modified) clang/test/Driver/darwin-objc-selector-stubs.m (+43-14) 


``````````diff
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp b/clang/lib/Driver/ToolChains/Darwin.cpp
index 8014b5d115da1..8b000845fea18 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -3410,7 +3410,8 @@ void Darwin::addClangTargetOptions(
   // ld64-811.2+ does, for arm64, arm64e, and arm64_32.
   if (!DriverArgs.hasArgNoClaim(options::OPT_fobjc_msgsend_selector_stubs,
                                 options::OPT_fno_objc_msgsend_selector_stubs) &&
-      getTriple().isAArch64())
+      getTriple().isAArch64() &&
+      (getLinkerVersion(DriverArgs) >= VersionTuple(811, 2)))
     CC1Args.push_back("-fobjc-msgsend-selector-stubs");
 
   // Enable objc_msgSend class selector stubs by default if the linker supports
@@ -3418,7 +3419,8 @@ void Darwin::addClangTargetOptions(
   if (!DriverArgs.hasArgNoClaim(
           options::OPT_fobjc_msgsend_class_selector_stubs,
           options::OPT_fno_objc_msgsend_class_selector_stubs) &&
-      getTriple().isAArch64())
+      getTriple().isAArch64() &&
+      (getLinkerVersion(DriverArgs) >= VersionTuple(1250, 0)))
     CC1Args.push_back("-fobjc-msgsend-class-selector-stubs");
 
   // Pass "-fno-sized-deallocation" only when the user hasn't manually enabled
diff --git a/clang/test/Driver/darwin-objc-selector-stubs.m b/clang/test/Driver/darwin-objc-selector-stubs.m
index 4cbb67f63b06c..b4a23ce768586 100644
--- a/clang/test/Driver/darwin-objc-selector-stubs.m
+++ b/clang/test/Driver/darwin-objc-selector-stubs.m
@@ -1,35 +1,64 @@
 // Check default enablement of Objective-C objc_msgSend selector stubs codegen.
 
-// Enabled by default for AArch64 targets.
+// Enabled by default with ld64-811.2+ ...
 
-// arm64
-// RUN: %clang -target arm64-apple-ios15            -### %s 2>&1 | FileCheck %s
-// RUN: %clang -target arm64-apple-macos12          -### %s 2>&1 | FileCheck %s
+// ... for arm64
+// RUN: %clang -target arm64-apple-ios15            -mlinker-version=1250  -### %s 2>&1 | FileCheck %s
+// RUN: %clang -target arm64-apple-ios15            -mlinker-version=1249  -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-ios15            -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-ios15            -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
 
-// arm64e
-// RUN: %clang -target arm64e-apple-ios15           -### %s 2>&1 | FileCheck %s
+// RUN: %clang -target arm64-apple-macos12          -mlinker-version=1250  -### %s 2>&1 | FileCheck %s
+// RUN: %clang -target arm64-apple-macos12          -mlinker-version=1249  -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-macos12          -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-macos12          -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
 
-// arm64_32
-// RUN: %clang -target arm64_32-apple-watchos8      -### %s 2>&1 | FileCheck %s
+// ... for arm64e
+// RUN: %clang -target arm64e-apple-ios15           -mlinker-version=1250  -### %s 2>&1 | FileCheck %s
+// RUN: %clang -target arm64e-apple-ios15           -mlinker-version=1249  -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64e-apple-ios15           -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64e-apple-ios15           -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
 
+// ... and arm64_32.
+// RUN: %clang -target arm64_32-apple-watchos8      -mlinker-version=1250  -### %s 2>&1 | FileCheck %s
+// RUN: %clang -target arm64_32-apple-watchos8      -mlinker-version=1249  -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64_32-apple-watchos8      -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64_32-apple-watchos8      -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
 
-// Disabled elsewhere, e.g. x86_64 ...
-// RUN: %clang -target x86_64-apple-macos12         -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
-// RUN: %clang -target x86_64-apple-ios15-simulator -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+
+// Disabled elsewhere, e.g. x86_64.
+// RUN: %clang -target x86_64-apple-macos12         -mlinker-version=1250  -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target x86_64-apple-macos12         -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target x86_64-apple-macos12         -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+
+// RUN: %clang -target x86_64-apple-ios15-simulator -mlinker-version=1250  -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target x86_64-apple-ios15-simulator -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target x86_64-apple-ios15-simulator -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
 
 // ... or armv7k.
-// RUN: %clang -target armv7k-apple-watchos6        -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target armv7k-apple-watchos6        -mlinker-version=1250  -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target armv7k-apple-watchos6        -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target armv7k-apple-watchos6        -mlinker-version=811   -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+
+
+// Enabled if you ask for it.
+// If the linker version isn't specified on the command line, the cmake default version is used.
+// RUN: %clang -target arm64-apple-macos12 -fobjc-msgsend-selector-stubs                    -### %s 2>&1 | FileCheck %s -check-prefix=INST_STUB
 
+// RUN: %clang -target arm64-apple-macos12 -fobjc-msgsend-selector-stubs -mlinker-version=0 -### %s 2>&1 | FileCheck %s -check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-macos12 -fobjc-msgsend-class-selector-stubs -mlinker-version=0 -### %s 2>&1 | FileCheck %s -check-prefix=CLASS_STUB_ONLY
 
 // Disabled if you ask for that.
-// RUN: %clang -target arm64-apple-macos12 -fno-objc-msgsend-selector-stubs       -### %s 2>&1 | FileCheck %s --check-prefix=CLASS_STUB_ONLY
-// RUN: %clang -target arm64-apple-macos12 -fno-objc-msgsend-class-selector-stubs -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
+// RUN: %clang -target arm64-apple-macos12 -fno-objc-msgsend-selector-stubs -mlinker-version=811.2 -### %s 2>&1 | FileCheck %s --check-prefix=NOSTUBS
+// RUN: %clang -target arm64-apple-macos12 -fno-objc-msgsend-selector-stubs -mlinker-version=1250 -### %s 2>&1  | FileCheck %s --check-prefix=CLASS_STUB_ONLY
+// RUN: %clang -target arm64-apple-macos12 -fno-objc-msgsend-class-selector-stubs -mlinker-version=1250 -### %s 2>&1 | FileCheck %s --check-prefix=INST_STUB_ONLY
 
 
 // CHECK: "-fobjc-msgsend-selector-stubs" "-fobjc-msgsend-class-selector-stubs"
 // INST_STUB_ONLY-NOT: objc-msgsend-class-selector-stubs
 // INST_STUB_ONLY: objc-msgsend-selector-stubs
 // INST_STUB_ONLY-NOT: objc-msgsend-class-selector-stubs
+// INST_STUB: objc-msgsend-selector-stubs
 // CLASS_STUB_ONLY-NOT: objc-msgsend-selector-stubs
 // CLASS_STUB_ONLY: objc-msgsend-class-selector-stubs
 // CLASS_STUB_ONLY-NOT: objc-msgsend-selector-stubs

``````````

</details>


https://github.com/llvm/llvm-project/pull/193828


More information about the cfe-commits mailing list