https://github.com/cyndyishida created 
https://github.com/llvm/llvm-project/pull/202690

* Canonicalize driverkit26 to 27 in availability & deployment versioning.
* Make darwin27 and later map 1:1 to the same macOS major version.

>From 7ac22552030cee2ad6138d61cb76dbf289c832cf Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <[email protected]>
Date: Fri, 5 Jun 2026 15:42:40 -0700
Subject: [PATCH] [clang][Darwin] Canonicalize DriverKit platform between
 DriverKit 26<->27

* Canoncalize driverkit26 to 27 in availability & deployment versioning.

* Make darwin27 and later map 1:1 to the same macOS major version.
---
 clang/include/clang/Basic/Attr.td          |  2 ++
 clang/test/Driver/driverkit26-boundary.c   | 12 +++++++++++
 clang/test/Driver/simple-darwin.c          |  5 +++++
 llvm/lib/TargetParser/Triple.cpp           | 13 ++++++++++--
 llvm/unittests/TargetParser/TripleTest.cpp | 23 ++++++++++++++++++++++
 5 files changed, 53 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/driverkit26-boundary.c
 create mode 100644 clang/test/Driver/simple-darwin.c

diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index 7af72333d651c..d98f8565b4102 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -1162,6 +1162,7 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
              .Case("macosx", "macos")
              .Case("tvOS", "tvos")
              .Case("watchOS", "watchos")
+             .Case("DriverKit", "driverkit")
              .Case("iOSApplicationExtension", "ios_app_extension")
              .Case("macOSApplicationExtension", "macos_app_extension")
              .Case("tvOSApplicationExtension", "tvos_app_extension")
@@ -1238,6 +1239,7 @@ static llvm::Triple::OSType getOSType(llvm::StringRef 
Platform) {
              .Case("tvos", OSType::TvOS)
              .Case("watchos", OSType::WatchOS)
              .Case("bridgeos", OSType::BridgeOS)
+             .Case("driverkit", OSType::DriverKit)
              .Case("ios_app_extension", OSType::IOS)
              .Case("maccatalyst_app_extension", OSType::IOS)
              .Case("macos_app_extension", OSType::MacOSX)
diff --git a/clang/test/Driver/driverkit26-boundary.c 
b/clang/test/Driver/driverkit26-boundary.c
new file mode 100644
index 0000000000000..0bdb10d1e0a4e
--- /dev/null
+++ b/clang/test/Driver/driverkit26-boundary.c
@@ -0,0 +1,12 @@
+// Verify that implicit conversions of DriverKit26 map to DriverKit27.
+
+// RUN: rm -rf %t
+// RUN: %clang -target arm64-apple-driverkit26 %s -fsyntax-only 2>&1 | 
FileCheck %s
+
+// CHECK: overriding deployment version from '26' to '27'
+// CHECK: 'f0' is deprecated: first deprecated in DriverKit 27.0
+
+void f0(int) 
__attribute__((availability(driverkit,introduced=19.0,deprecated=26.0)));
+void test() {
+  f0(0);
+}
diff --git a/clang/test/Driver/simple-darwin.c 
b/clang/test/Driver/simple-darwin.c
new file mode 100644
index 0000000000000..56ed89e273e3b
--- /dev/null
+++ b/clang/test/Driver/simple-darwin.c
@@ -0,0 +1,5 @@
+// RUN: %clang -target arm64-apple-darwin27 -fuse-ld= \
+// RUN:   -mlinker-version=520 %s -### 2>&1 | FileCheck %s
+
+// CHECK: "-cc1" "-triple" "arm64-apple-macosx27.0.0"
+// CHECK: "-platform_version" "macos" "27.0.0"
diff --git a/llvm/lib/TargetParser/Triple.cpp b/llvm/lib/TargetParser/Triple.cpp
index c6515425b7eb5..4cca24b52af94 100644
--- a/llvm/lib/TargetParser/Triple.cpp
+++ b/llvm/lib/TargetParser/Triple.cpp
@@ -1744,9 +1744,12 @@ bool Triple::getMacOSXVersion(VersionTuple &Version) 
const {
     } else if (Version.getMajor() < 25) {
       // darwin20-24 corresponds to macOS 11-15.
       Version = VersionTuple(11 + Version.getMajor() - 20);
-    } else {
-      // darwin25 corresponds with macOS26+.
+    } else if ((Version.getMajor() == 25) || (Version.getMajor() == 26)) {
+      // darwin25-26 corresponds to macOS 26-27.
       Version = VersionTuple(Version.getMajor() + 1);
+    } else {
+      // Starting with darwin27, it naturally corresponds to the same macOS
+      // version.
     }
     break;
   case MacOSX:
@@ -2644,6 +2647,12 @@ VersionTuple Triple::getCanonicalVersionForOS(OSType 
OSKind,
       return Version.withMajorReplaced(Version.getMajor() + WatchOSRangeBump);
     break;
   }
+  case DriverKit: {
+    // DriverKit26 is canonicalized to 27.
+    if (Version.getMajor() == 26U)
+      return Version.withMajorReplaced(27);
+    break;
+  }
   default:
     return Version;
   }
diff --git a/llvm/unittests/TargetParser/TripleTest.cpp 
b/llvm/unittests/TargetParser/TripleTest.cpp
index 9ce222b6c9c39..ff090429d74ca 100644
--- a/llvm/unittests/TargetParser/TripleTest.cpp
+++ b/llvm/unittests/TargetParser/TripleTest.cpp
@@ -2668,11 +2668,30 @@ TEST(TripleTest, getOSVersion) {
   EXPECT_TRUE(T.isArch64Bit());
   EXPECT_EQ(VersionTuple(26, 0), T.getiOSVersion());
 
+  T = Triple("arm64-apple-darwin25");
+  EXPECT_TRUE(T.isMacOSX());
+  EXPECT_FALSE(T.isiOS());
+  EXPECT_FALSE(T.isArch16Bit());
+  EXPECT_FALSE(T.isArch32Bit());
+  EXPECT_TRUE(T.isArch64Bit());
+  T.getMacOSXVersion(Version);
+  EXPECT_EQ(VersionTuple(26), Version);
+
   T = Triple("x86_64-apple-darwin26");
   EXPECT_TRUE(T.isMacOSX());
   T.getMacOSXVersion(Version);
   EXPECT_EQ(VersionTuple(27), Version);
 
+  T = Triple("x86_64-apple-darwin27");
+  EXPECT_TRUE(T.isMacOSX());
+  T.getMacOSXVersion(Version);
+  EXPECT_EQ(VersionTuple(27), Version);
+
+  T = Triple("x86_64-apple-darwin30");
+  EXPECT_TRUE(T.isMacOSX());
+  T.getMacOSXVersion(Version);
+  EXPECT_EQ(VersionTuple(30), Version);
+
   // Check invalid ranges are remapped.
   T = Triple("arm64-apple-visionos6.0");
   EXPECT_FALSE(T.isMacOSX());
@@ -2760,6 +2779,10 @@ TEST(TripleTest, getOSVersion) {
   Version = T.getDriverKitVersion();
   EXPECT_EQ(VersionTuple(19, 0), Version);
 
+  T = Triple("arm64-apple-driverkit27");
+  Version = T.getDriverKitVersion();
+  EXPECT_EQ(VersionTuple(27), Version);
+
   T = Triple("dxil-unknown-shadermodel6.6-pixel");
   EXPECT_EQ(Triple::dxil, T.getArch());
   EXPECT_EQ(Triple::UnknownVendor, T.getVendor());

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

Reply via email to