[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida edited 
https://github.com/llvm/llvm-project/pull/143548
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread Cyndy Ishida via cfe-commits


@@ -17,7 +17,7 @@ void a(void) __attribute__((availability(macos, 
introduced=12.0)));
 // A-NEXT: ]
 
 // RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix B
-void b(void) __attribute__((availability(macos, introduced=11.0, 
deprecated=12.0, obsoleted=20.0)));
+void b(void) __attribute__((availability(macos, introduced=11.0, 
deprecated=12.0, obsoleted=30.0)));

cyndyishida wrote:

I'm not sure. I just incremented it by the same value to avoid a warning on an 
invalid range.

https://github.com/llvm/llvm-project/pull/143548
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread Cyndy Ishida via cfe-commits

https://github.com/cyndyishida closed 
https://github.com/llvm/llvm-project/pull/143548
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread via cfe-commits

https://github.com/cooperp approved this pull request.


https://github.com/llvm/llvm-project/pull/143548
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread Jonas Devlieghere via cfe-commits

https://github.com/JDevlieghere approved this pull request.

LGTM

https://github.com/llvm/llvm-project/pull/143548
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread via cfe-commits

llvmbot wrote:




@llvm/pr-subscribers-clang

Author: Cyndy Ishida (cyndyishida)


Changes

* Translate the following versions to 26.
  * watchOS 12 -> 26
  * visionOS 3 -> 26
  * macos 16 -> 26
  * iOS 19 -> 26
  * tvOS 19 -> 26

* Emit diagnostics, but allow conversion when clients attempt to use invalid 
gaps in OS versioning in availability.

* For target-triples, only allow "valid" versions for implicit conversions.

---

Patch is 43.62 KiB, truncated to 20.00 KiB below, full version: 
https://github.com/llvm/llvm-project/pull/143548.diff


21 Files Affected:

- (modified) clang/include/clang/Basic/Attr.td (+22) 
- (modified) clang/include/clang/Basic/DiagnosticSemaKinds.td (+3) 
- (modified) clang/lib/Driver/ToolChains/Darwin.cpp (+15-2) 
- (modified) clang/lib/Sema/SemaDeclAttr.cpp (+33-2) 
- (modified) clang/lib/Sema/SemaExprObjC.cpp (+8-3) 
- (added) clang/test/CodeGen/attr-availability-aligned-versions.c (+28) 
- (modified) clang/test/Driver/darwin-infer-simulator-sdkroot.c (+2-2) 
- (added) clang/test/Driver/darwin-invalid-os-versions.c (+22) 
- (modified) clang/test/Driver/darwin-ld-platform-version-macos.c (+5) 
- (modified) clang/test/Driver/darwin-ld-platform-version-watchos.c (+48) 
- (modified) clang/test/ExtractAPI/availability.c (+4-4) 
- (modified) clang/test/ExtractAPI/inherited_availability.m (+8-8) 
- (added) clang/test/Sema/Inputs/XROS.sdk/SDKSettings.json (+9) 
- (added) clang/test/Sema/attr-availability-invalid-os-versions.c (+35) 
- (added) clang/test/Sema/attr-availability-ios-aligned-versions.c (+116) 
- (added) clang/test/Sema/attr-availability-ios-fallback-aligned-versions.c 
(+32) 
- (modified) clang/test/Sema/attr-availability-iosmac-infer-from-macos.c (+1-1) 
- (modified) llvm/include/llvm/TargetParser/Triple.h (+5-1) 
- (modified) llvm/lib/TargetParser/Triple.cpp (+107-13) 
- (modified) llvm/lib/TextAPI/Platform.cpp (+3-1) 
- (modified) llvm/unittests/TargetParser/TripleTest.cpp (+142-4) 


``diff
diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index f889e41c8699f..bd07bb1361a85 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -,6 +,8 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
 return llvm::StringSwitch(Platform)
  .Case("iOS", "ios")
  .Case("macOS", "macos")
+ .Case("macOSX", "macos")
+ .Case("macosx", "macos")
  .Case("tvOS", "tvos")
  .Case("watchOS", "watchos")
  .Case("iOSApplicationExtension", "ios_app_extension")
@@ -1175,6 +1177,26 @@ static llvm::Triple::EnvironmentType 
getEnvironmentType(llvm::StringRef Environm
  .Case("library", llvm::Triple::Library)
  .Default(llvm::Triple::UnknownEnvironment);
 }
+
+static llvm::Triple::OSType getOSType(llvm::StringRef Platform) {
+using OSType = llvm::Triple::OSType;
+return llvm::StringSwitch(Platform)
+ .Case("ios", OSType::IOS)
+ .Case("macos", OSType::MacOSX)
+ .Case("maccatalyst", OSType::IOS)
+ .Case("tvos", OSType::TvOS)
+ .Case("watchos", OSType::WatchOS)
+ .Case("bridgeos", OSType::BridgeOS)
+ .Case("ios_app_extension", OSType::IOS)
+ .Case("maccatalyst_app_extension", OSType::IOS)
+ .Case("macos_app_extension", OSType::MacOSX)
+ .Case("tvos_app_extension", OSType::TvOS)
+ .Case("watchos_app_extension", OSType::WatchOS)
+ .Case("xros", OSType::XROS)
+ .Case("xros_app_extension", OSType::XROS)
+ .Default(OSType::UnknownOS);
+}
+
 }];
   let HasCustomParsing = 1;
   let InheritEvenIfAlreadyPresent = 1;
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 1f283b776a02c..0f77083dac9df 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -4063,6 +4063,9 @@ def warn_at_available_unchecked_use : Warning<
   "%select{@available|__builtin_available}0 does not guard availability here; "
   "use if (%select{@available|__builtin_available}0) instead">,
   InGroup>;
+def warn_availability_invalid_os_version
+: Warning<"invalid %1 version '%0' in availability attribute">, 
InGroup>;
+def note_availability_invalid_os_version_adjusted: Note<"implicitly treating 
version as '%0'">;
 
 def warn_missing_sdksettings_for_availability_checking : Warning<
   "%0 availability is ignored without a valid 'SDKSettings.json' in the SDK">,
diff --git a/clang/lib/Driver/ToolChains/Darwin.cpp 
b/clang/lib/Driver/ToolChains/Darwin.cpp
index 59f423b633464..e987ef78920e8 100644
--- a/clang/lib/Driver/ToolChains/Darwin.cpp
+++ b/clang/lib/Driver/ToolChains/Darwin.cpp
@@ -1721,10 +1721,14 @@ struct DarwinPlatform {
 UnderlyingOSVersion.reset();
 return Result;
   }
+  bool isValidOSVersion() 

[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)

2025-06-10 Thread Cyndy Ishida via cfe-commits

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

* Translate the following versions to 26.
  * watchOS 12 -> 26
  * visionOS 3 -> 26
  * macos 16 -> 26
  * iOS 19 -> 26
  * tvOS 19 -> 26

* Emit diagnostics, but allow conversion when clients attempt to use invalid 
gaps in OS versioning in availability.

* For target-triples, only allow "valid" versions for implicit conversions.

>From 290258a09ed66fa53b49b086a36bb1b4ccb6d00c Mon Sep 17 00:00:00 2001
From: Cyndy Ishida 
Date: Mon, 9 Jun 2025 19:42:33 -0700
Subject: [PATCH] [clang][Darwin] Align all OS Versions for 26

* Translate the following versions to 26.
  * watchOS 12 -> 26
  * visionOS 3 -> 26
  * macos 16 -> 26
  * iOS 19 -> 26
  * tvOS 19 -> 26

* Emit diagnostics, but allow conversion when clients attempt to use invalid 
gaps in
OS versioning in availability.

* For target-triples, only allow "valid" versions for implicit
conversions.
---
 clang/include/clang/Basic/Attr.td |  22 +++
 .../clang/Basic/DiagnosticSemaKinds.td|   3 +
 clang/lib/Driver/ToolChains/Darwin.cpp|  17 +-
 clang/lib/Sema/SemaDeclAttr.cpp   |  35 -
 clang/lib/Sema/SemaExprObjC.cpp   |  11 +-
 .../attr-availability-aligned-versions.c  |  28 
 .../Driver/darwin-infer-simulator-sdkroot.c   |   4 +-
 .../test/Driver/darwin-invalid-os-versions.c  |  22 +++
 .../Driver/darwin-ld-platform-version-macos.c |   5 +
 .../darwin-ld-platform-version-watchos.c  |  48 ++
 clang/test/ExtractAPI/availability.c  |   8 +-
 .../test/ExtractAPI/inherited_availability.m  |  16 +-
 .../Sema/Inputs/XROS.sdk/SDKSettings.json |   9 ++
 .../attr-availability-invalid-os-versions.c   |  35 +
 .../attr-availability-ios-aligned-versions.c  | 116 ++
 ...ailability-ios-fallback-aligned-versions.c |  32 
 ...ttr-availability-iosmac-infer-from-macos.c |   2 +-
 llvm/include/llvm/TargetParser/Triple.h   |   6 +-
 llvm/lib/TargetParser/Triple.cpp  | 120 --
 llvm/lib/TextAPI/Platform.cpp |   4 +-
 llvm/unittests/TargetParser/TripleTest.cpp| 146 +-
 21 files changed, 648 insertions(+), 41 deletions(-)
 create mode 100644 clang/test/CodeGen/attr-availability-aligned-versions.c
 create mode 100644 clang/test/Driver/darwin-invalid-os-versions.c
 create mode 100644 clang/test/Sema/Inputs/XROS.sdk/SDKSettings.json
 create mode 100644 clang/test/Sema/attr-availability-invalid-os-versions.c
 create mode 100644 clang/test/Sema/attr-availability-ios-aligned-versions.c
 create mode 100644 
clang/test/Sema/attr-availability-ios-fallback-aligned-versions.c

diff --git a/clang/include/clang/Basic/Attr.td 
b/clang/include/clang/Basic/Attr.td
index f889e41c8699f..bd07bb1361a85 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -,6 +,8 @@ static llvm::StringRef 
canonicalizePlatformName(llvm::StringRef Platform) {
 return llvm::StringSwitch(Platform)
  .Case("iOS", "ios")
  .Case("macOS", "macos")
+ .Case("macOSX", "macos")
+ .Case("macosx", "macos")
  .Case("tvOS", "tvos")
  .Case("watchOS", "watchos")
  .Case("iOSApplicationExtension", "ios_app_extension")
@@ -1175,6 +1177,26 @@ static llvm::Triple::EnvironmentType 
getEnvironmentType(llvm::StringRef Environm
  .Case("library", llvm::Triple::Library)
  .Default(llvm::Triple::UnknownEnvironment);
 }
+
+static llvm::Triple::OSType getOSType(llvm::StringRef Platform) {
+using OSType = llvm::Triple::OSType;
+return llvm::StringSwitch(Platform)
+ .Case("ios", OSType::IOS)
+ .Case("macos", OSType::MacOSX)
+ .Case("maccatalyst", OSType::IOS)
+ .Case("tvos", OSType::TvOS)
+ .Case("watchos", OSType::WatchOS)
+ .Case("bridgeos", OSType::BridgeOS)
+ .Case("ios_app_extension", OSType::IOS)
+ .Case("maccatalyst_app_extension", OSType::IOS)
+ .Case("macos_app_extension", OSType::MacOSX)
+ .Case("tvos_app_extension", OSType::TvOS)
+ .Case("watchos_app_extension", OSType::WatchOS)
+ .Case("xros", OSType::XROS)
+ .Case("xros_app_extension", OSType::XROS)
+ .Default(OSType::UnknownOS);
+}
+
 }];
   let HasCustomParsing = 1;
   let InheritEvenIfAlreadyPresent = 1;
diff --git a/clang/include/clang/Basic/DiagnosticSemaKinds.td 
b/clang/include/clang/Basic/DiagnosticSemaKinds.td
index 1f283b776a02c..0f77083dac9df 100644
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -4063,6 +4063,9 @@ def warn_at_available_unchecked_use : Warning<
   "%select{@available|__builtin_available}0 does not guard availability here; "
   "use if (%select{@available|__builtin_available}0) instead">,
   InGroup>;
+def warn_avai