[clang] [llvm] [clang][Darwin] Canonicalize DriverKit platform between DriverKit 26<->27 (PR #202690)
Cyndy Ishida via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 9 08:25:14 PDT 2026
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 <cyndy_ishida at apple.com>
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());
More information about the cfe-commits
mailing list