[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)
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)
@@ -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)
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)
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)
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)
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)
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