-
Notifications
You must be signed in to change notification settings - Fork 14.4k
[clang][Darwin] Align all OS Versions for 26 #143548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
* 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.
@llvm/pr-subscribers-clang-driver @llvm/pr-subscribers-clang Author: Cyndy Ishida (cyndyishida) Changes
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:
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@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@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
-@property int moreRestrictive __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0)));
+@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
-@property int DIP __attribute__((availability(macos, introduced=10.0, deprecated=11.0, obsoleted=19.0)));
+@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]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
@@ -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))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If these are supposed to be future versions, they should likely be 99.0
instead of something we're likely to hit in the next few years.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm not sure. I just incremented it by the same value as the bump to avoid a warning on an invalid range.
* 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.
* 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.
Translate the following versions to 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.