[clang] [llvm] [clang][Darwin] Align all OS Versions for 26 (PR #143548)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Jun 10 08:13:45 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-clang
Author: Cyndy Ishida (cyndyishida)
<details>
<summary>Changes</summary>
* 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
@@ -1111,6 +1111,8 @@ static llvm::StringRef canonicalizePlatformName(llvm::StringRef Platform) {
return llvm::StringSwitch<llvm::StringRef>(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<OSType>(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<DiagGroup<"unsupported-availability-guard">>;
+def warn_availability_invalid_os_version
+ : Warning<"invalid %1 version '%0' in availability attribute">, InGroup<DiagGroup<"invalid-version-availability">>;
+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() const {
+ return llvm::Triple::isValidVersionForOS(getOSFromPlatform(Platform),
+ getOSVersion());
+ }
VersionTuple getCanonicalOSVersion() const {
- return llvm::Triple::getCanonicalVersionForOS(getOSFromPlatform(Platform),
- getOSVersion());
+ return llvm::Triple::getCanonicalVersionForOS(
+ getOSFromPlatform(Platform), getOSVersion(), /*IsInValidRange=*/true);
}
void setOSVersion(const VersionTuple &Version) {
@@ -2451,6 +2455,9 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
}
assert(PlatformAndVersion && "Unable to infer Darwin variant");
+ if (!PlatformAndVersion->isValidOSVersion())
+ getDriver().Diag(diag::err_drv_invalid_version_number)
+ << PlatformAndVersion->getAsString(Args, Opts);
// After the deployment OS version has been resolved, set it to the canonical
// version before further error detection and converting to a proper target
// triple.
@@ -2552,6 +2559,12 @@ void Darwin::AddDeploymentTarget(DerivedArgList &Args) const {
ZipperedOSVersion = PlatformAndVersion->getZipperedOSVersion();
setTarget(Platform, Environment, Major, Minor, Micro, ZipperedOSVersion);
TargetVariantTriple = PlatformAndVersion->getTargetVariantTriple();
+ if (TargetVariantTriple &&
+ !llvm::Triple::isValidVersionForOS(TargetVariantTriple->getOS(),
+ TargetVariantTriple->getOSVersion())) {
+ getDriver().Diag(diag::err_drv_invalid_version_number)
+ << TargetVariantTriple->str();
+ }
if (const Arg *A = Args.getLastArg(options::OPT_isysroot)) {
StringRef SDK = getSDKName(A->getValue());
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index da0e3265767d8..6360827f415b8 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -2374,7 +2374,8 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
IdentifierLoc *Platform = AL.getArgAsIdent(0);
IdentifierInfo *II = Platform->getIdentifierInfo();
- if (AvailabilityAttr::getPrettyPlatformName(II->getName()).empty())
+ StringRef PrettyName = AvailabilityAttr::getPrettyPlatformName(II->getName());
+ if (PrettyName.empty())
S.Diag(Platform->getLoc(), diag::warn_availability_unknown_platform)
<< Platform->getIdentifierInfo();
@@ -2385,6 +2386,32 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
AvailabilityChange Introduced = AL.getAvailabilityIntroduced();
AvailabilityChange Deprecated = AL.getAvailabilityDeprecated();
AvailabilityChange Obsoleted = AL.getAvailabilityObsoleted();
+
+ const llvm::Triple::OSType PlatformOS = AvailabilityAttr::getOSType(
+ AvailabilityAttr::canonicalizePlatformName(II->getName()));
+
+ auto reportAndUpdateIfInvalidOS = [&](auto &InputVersion) -> void {
+ const bool IsInValidRange =
+ llvm::Triple::isValidVersionForOS(PlatformOS, InputVersion);
+ // Canonicalize availability versions.
+ auto CanonicalVersion = llvm::Triple::getCanonicalVersionForOS(
+ PlatformOS, InputVersion, IsInValidRange);
+ if (!IsInValidRange) {
+ S.Diag(Platform->getLoc(), diag::warn_availability_invalid_os_version)
+ << InputVersion.getAsString() << PrettyName;
+ S.Diag(Platform->getLoc(),
+ diag::note_availability_invalid_os_version_adjusted)
+ << CanonicalVersion.getAsString();
+ }
+ InputVersion = CanonicalVersion;
+ };
+
+ if (PlatformOS != llvm::Triple::OSType::UnknownOS) {
+ reportAndUpdateIfInvalidOS(Introduced.Version);
+ reportAndUpdateIfInvalidOS(Deprecated.Version);
+ reportAndUpdateIfInvalidOS(Obsoleted.Version);
+ }
+
bool IsUnavailable = AL.getUnavailableLoc().isValid();
bool IsStrict = AL.getStrictLoc().isValid();
StringRef Str;
@@ -2476,7 +2503,11 @@ static void handleAvailabilityAttr(Sema &S, Decl *D, const ParsedAttr &AL) {
}
auto Major = Version.getMajor();
- auto NewMajor = Major >= 9 ? Major - 7 : 0;
+ auto NewMajor = Major;
+ if (Major < 9)
+ NewMajor = 0;
+ else if (Major < 12)
+ NewMajor = Major - 7;
if (NewMajor >= 2) {
if (Version.getMinor()) {
if (Version.getSubminor())
diff --git a/clang/lib/Sema/SemaExprObjC.cpp b/clang/lib/Sema/SemaExprObjC.cpp
index b248ea380a526..3505d9f38d23c 100644
--- a/clang/lib/Sema/SemaExprObjC.cpp
+++ b/clang/lib/Sema/SemaExprObjC.cpp
@@ -5151,7 +5151,8 @@ ExprResult SemaObjC::ActOnObjCAvailabilityCheckExpr(
SourceLocation RParen) {
ASTContext &Context = getASTContext();
auto FindSpecVersion =
- [&](StringRef Platform) -> std::optional<VersionTuple> {
+ [&](StringRef Platform,
+ const llvm::Triple::OSType &OS) -> std::optional<VersionTuple> {
auto Spec = llvm::find_if(AvailSpecs, [&](const AvailabilitySpec &Spec) {
return Spec.getPlatform() == Platform;
});
@@ -5164,12 +5165,16 @@ ExprResult SemaObjC::ActOnObjCAvailabilityCheckExpr(
}
if (Spec == AvailSpecs.end())
return std::nullopt;
- return Spec->getVersion();
+
+ return llvm::Triple::getCanonicalVersionForOS(
+ OS, Spec->getVersion(),
+ llvm::Triple::isValidVersionForOS(OS, Spec->getVersion()));
};
VersionTuple Version;
if (auto MaybeVersion =
- FindSpecVersion(Context.getTargetInfo().getPlatformName()))
+ FindSpecVersion(Context.getTargetInfo().getPlatformName(),
+ Context.getTargetInfo().getTriple().getOS()))
Version = *MaybeVersion;
// The use of `@available` in the enclosing context should be analyzed to
diff --git a/clang/test/CodeGen/attr-availability-aligned-versions.c b/clang/test/CodeGen/attr-availability-aligned-versions.c
new file mode 100644
index 0000000000000..5555fa8e7f690
--- /dev/null
+++ b/clang/test/CodeGen/attr-availability-aligned-versions.c
@@ -0,0 +1,28 @@
+/// This test verifies IR generated for APIs protected with availability annotations with a common versions.
+// RUN: %clang_cc1 -fvisibility=hidden "-triple" "arm64-apple-ios26.0" -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -fvisibility=hidden "-triple" "arm64-apple-tvos26" -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -fvisibility=hidden "-triple" "arm64-apple-watchos26" -emit-llvm -o - %s | FileCheck %s
+// RUN: %clang_cc1 -fvisibility=hidden "-triple" "arm64-apple-ios18" -emit-llvm -o - %s | FileCheck -check-prefix=OLD %s
+
+__attribute__((availability(ios,introduced=19)))
+void f0(void);
+
+__attribute__((availability(ios,introduced=26)))
+void f1(void);
+
+__attribute__((availability(ios,introduced=27)))
+void f2(void);
+
+// OLD: declare extern_weak void @f0
+// OLD: declare extern_weak void @f1
+// OLD: declare extern_weak void @f2
+
+// CHECK: declare void @f0
+// CHECK: declare void @f1
+// CHECK: declare extern_weak void @f2
+
+void test() {
+ f0();
+ f1();
+ f2();
+}
diff --git a/clang/test/Driver/darwin-infer-simulator-sdkroot.c b/clang/test/Driver/darwin-infer-simulator-sdkroot.c
index 519e6d27540e3..a946015028aa3 100644
--- a/clang/test/Driver/darwin-infer-simulator-sdkroot.c
+++ b/clang/test/Driver/darwin-infer-simulator-sdkroot.c
@@ -41,9 +41,9 @@
//
// RUN: rm -rf %t/SDKs/WatchOS3.0.sdk
// RUN: mkdir -p %t/SDKs/WatchOS3.0.sdk
-// RUN: env SDKROOT=%t/SDKs/WatchOS3.0.sdk %clang %s -fuse-ld= -mlinker-version=400 -### 2>&1 \
+// RUN: env SDKROOT=%t/SDKs/WatchOS3.0.sdk %clang %s -fuse-ld= -arch arm64_32 -mlinker-version=400 -### 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-WATCH %s
-// RUN: env WATCHOS_DEPLOYMENT_TARGET=3.0 %clang %s -fuse-ld= -isysroot %t/SDKs/WatchOS3.0.sdk -mlinker-version=400 -### 2>&1 \
+// RUN: env WATCHOS_DEPLOYMENT_TARGET=3.0 %clang %s -fuse-ld= -arch arm64_32 -isysroot %t/SDKs/WatchOS3.0.sdk -mlinker-version=400 -### 2>&1 \
// RUN: | FileCheck --check-prefix=CHECK-WATCH %s
//
// CHECK-WATCH: clang
diff --git a/clang/test/Driver/darwin-invalid-os-versions.c b/clang/test/Driver/darwin-invalid-os-versions.c
new file mode 100644
index 0000000000000..d9424c1e67280
--- /dev/null
+++ b/clang/test/Driver/darwin-invalid-os-versions.c
@@ -0,0 +1,22 @@
+/// Verify invalid OSVersions are diagnosed.
+
+// RUN: not %clang -target arm64-apple-ios20 -c %s 2>&1 | FileCheck %s --check-prefix=IOS
+// IOS: error: invalid version number in '-target arm64-apple-ios20'
+
+// RUN: not %clang -target arm64-apple-watchos20 -c %s 2>&1 | FileCheck %s --check-prefix=WATCHOS
+// WATCHOS: error: invalid version number in '-target arm64-apple-watchos20'
+
+// RUN: not %clang -target arm64-apple-macosx19 -c %s 2>&1 | FileCheck %s --check-prefix=MAC
+// MAC: error: invalid version number in '-target arm64-apple-macosx19'
+
+// RUN: not %clang -target arm64-apple-ios22-macabi -c %s 2>&1 | FileCheck %s --check-prefix=IOSMAC
+// IOSMAC: error: invalid version number in '-target arm64-apple-ios22-macabi'
+
+// RUN: not %clang -target arm64-apple-macosx16 -darwin-target-variant arm64-apple-ios22-macabi -c %s 2>&1 | FileCheck %s --check-prefix=ZIPPERED
+// ZIPPERED: error: invalid version number in 'arm64-apple-ios22-macabi'
+
+// RUN: not %clang -target arm64-apple-visionos5 -c %s 2>&1 | FileCheck %s --check-prefix=VISION
+// VISION: error: invalid version number in '-target arm64-apple-visionos5'
+
+// RUN: not %clang -target arm64-apple-tvos21 -c %s 2>&1 | FileCheck %s --check-prefix=TV
+// TV: error: invalid version number in '-target arm64-apple-tvos21'
diff --git a/clang/test/Driver/darwin-ld-platform-version-macos.c b/clang/test/Driver/darwin-ld-platform-version-macos.c
index 355df8dfc1bc2..b16ca8a853745 100644
--- a/clang/test/Driver/darwin-ld-platform-version-macos.c
+++ b/clang/test/Driver/darwin-ld-platform-version-macos.c
@@ -48,3 +48,8 @@
// RUN: -### %t.o 2>&1 \
// RUN: | FileCheck --check-prefix=NOSDK %s
// NOSDK: "-platform_version" "macos" "10.13.0" "10.13.0"
+
+// RUN: %clang -target arm64-apple-macos26 -mlinker-version=520 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=VERSION_BUMP %s
+// VERSION_BUMP: "-platform_version" "macos" "26.0.0" "26.0.0"
diff --git a/clang/test/Driver/darwin-ld-platform-version-watchos.c b/clang/test/Driver/darwin-ld-platform-version-watchos.c
index fc8e859f30efa..afbc3194963fb 100644
--- a/clang/test/Driver/darwin-ld-platform-version-watchos.c
+++ b/clang/test/Driver/darwin-ld-platform-version-watchos.c
@@ -17,6 +17,54 @@
// RUN: -### %t.o 2>&1 \
// RUN: | FileCheck --check-prefix=SIMUL %s
+// RUN: %clang -target arm64-apple-watchos6.3 -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=400 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-OLD %s
+
+// RUN: %clang -target arm64e-apple-watchos6.3 -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=400 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-OLD %s
+
+// RUN: %clang -target arm64-apple-watchos26.1 -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=400 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-OLD-261 %s
+
+// RUN: %clang -target arm64-apple-watchos6.3 -fuse-ld=lld \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=0 \
+// RUN: -### %t.o -B%S/Inputs/lld 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-NEW %s
+
+// RUN: %clang -target arm64e-apple-watchos6.3 -fuse-ld=lld \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=0 \
+// RUN: -### %t.o -B%S/Inputs/lld 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-NEW %s
+
+// RUN: %clang -target arm64-apple-watchos6.3 -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=520 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-NEW %s
+
+// RUN: %clang -target arm64-apple-watchos26.1 -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=520 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-LINKER-NEW-261 %s
+
+// RUN: %clang -target arm64-apple-watchos6-simulator -fuse-ld= \
+// RUN: -isysroot %S/Inputs/WatchOS6.0.sdk -mlinker-version=520 \
+// RUN: -### %t.o 2>&1 \
+// RUN: | FileCheck --check-prefix=ARM64-SIMUL %s
+
// LINKER-OLD: "-watchos_version_min" "5.2.0"
// LINKER-NEW: "-platform_version" "watchos" "5.2.0" "6.0"
// SIMUL: "-platform_version" "watchos-simulator" "6.0.0" "6.0"
+
+// ARM64-LINKER-OLD: "-watchos_version_min" "26.0.0"
+// ARM64-LINKER-OLD-261: "-watchos_version_min" "26.1.0"
+
+// ARM64-LINKER-NEW: "-platform_version" "watchos" "26.0.0" "6.0"
+// ARM64-LINKER-NEW-261: "-platform_version" "watchos" "26.1.0" "6.0"
+
+// ARM64-SIMUL: "-platform_version" "watchos-simulator" "7.0.0" "6.0"
diff --git a/clang/test/ExtractAPI/availability.c b/clang/test/ExtractAPI/availability.c
index 237b2ffa55d7d..4f7e21a5c3765 100644
--- a/clang/test/ExtractAPI/availability.c
+++ b/clang/test/ExtractAPI/availability.c
@@ -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)));
// B-LABEL: "!testLabel": "c:@F at b"
// B: "availability": [
// B-NEXT: {
@@ -33,7 +33,7 @@ void b(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0
// B-NEXT: "patch": 0
// B-NEXT: },
// B-NEXT: "obsoleted": {
-// B-NEXT: "major": 20,
+// B-NEXT: "major": 30,
// B-NEXT: "minor": 0,
// B-NEXT: "patch": 0
// B-NEXT: }
@@ -41,7 +41,7 @@ void b(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0
// B-NEXT: ]
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix E
-void c(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0, obsoleted=20.0))) __attribute__((availability(ios, introduced=13.0)));
+void c(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0, obsoleted=30.0))) __attribute__((availability(ios, introduced=13.0)));
// C-LABEL: "!testLabel": "c:@F at c"
// C: "availability": [
// C-NEXT: {
@@ -57,7 +57,7 @@ void c(void) __attribute__((availability(macos, introduced=11.0, deprecated=12.0
// C-NEXT: "patch": 0
// C-NEXT: },
// C-NEXT: "obsoleted": {
-// C-NEXT: "major": 20,
+// C-NEXT: "major": 30,
// C-NEXT: "minor": 0,
// C-NEXT: "patch": 0
// C-NEXT: }
diff --git a/clang/test/ExtractAPI/inherited_availability.m b/clang/test/ExtractAPI/inherited_availability.m
index c24e7fa8e208f..3d9f953bbda1f 100644
--- a/clang/test/ExtractAPI/inherited_availability.m
+++ b/clang/test/ExtractAPI/inherited_availability.m
@@ -4,7 +4,7 @@
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix A
-__attribute__((availability(macos, introduced=9.0, deprecated=12.0, obsoleted=20.0)))
+__attribute__((availability(macos, introduced=9.0, deprecated=12.0, obsoleted=30.0)))
@interface A
// A-LABEL: "!testLabel": "c:objc(cs)A"
// A: "availability": [
@@ -21,7 +21,7 @@ @interface A
// A-NEXT: "patch": 0
// A-NEXT: }
// A-NEXT: "obsoleted": {
-// A-NEXT: "major": 20,
+// A-NEXT: "major": 30,
// A-NEXT: "minor": 0,
// A-NEXT: "patch": 0
// A-NEXT: }
@@ -45,7 +45,7 @@ @interface A
// CP-NEXT: "patch": 0
// CP-NEXT: }
// CP-NEXT: "obsoleted": {
-// CP-NEXT: "major": 20,
+// CP-NEXT: "major": 30,
// CP-NEXT: "minor": 0,
// CP-NEXT: "patch": 0
// CP-NEXT: }
@@ -69,7 +69,7 @@ @interface A
// IP-NEXT: "patch": 0
// IP-NEXT: }
// IP-NEXT: "obsoleted": {
-// IP-NEXT: "major": 20,
+// IP-NEXT: "major": 30,
// IP-NEXT: "minor": 0,
// IP-NEXT: "patch": 0
// IP-NEXT: }
@@ -77,7 +77,7 @@ @interface A
// IP-NEXT: ]
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix MR
- at property int moreRestrictive __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0)));
+ at property int moreRestrictive __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=29.0)));
// MR-LABEL: "!testLabel": "c:objc(cs)A(py)moreRestrictive"
// MR: "availability": [
// MR-NEXT: {
@@ -93,7 +93,7 @@ @interface A
// MR-NEXT: "patch": 0
// MR-NEXT: }
// MR-NEXT: "obsoleted": {
-// MR-NEXT: "major": 19,
+// MR-NEXT: "major": 29,
// MR-NEXT: "minor": 0,
// MR-NEXT: "patch": 0
// MR-NEXT: }
@@ -148,7 +148,7 @@ @interface C
@interface D
// RUN: FileCheck %s --input-file %t/output.symbols.json --check-prefix DIP
- at property int DIP __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0)));
+ at property int DIP __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=29.0)));
// DIP-LABEL: "!testLabel": "c:objc(cs)D(py)DIP"
// DIP: "availability"...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/143548
More information about the cfe-commits
mailing list