From 339ab824a8132526e29dcbe930befbb486613694 Mon Sep 17 00:00:00 2001 From: Allan Shortlidge Date: Thu, 5 Jun 2025 19:10:59 -0700 Subject: [PATCH] AST: Fix iOS -> visionOS version remap for `@backDeployed` attrs. The version remapping for `@backDeployed` regressed due to a bug introduced by https://github.com/swiftlang/swift/pull/81922. Also, fix some visionOS tests that have gotten out of date because we don't seem to be running them in CI. Resolves rdar://152542983. --- lib/AST/Availability.cpp | 3 ++- .../back_deployed_attr_func_visionos.swift | 6 +++--- test/attr/attr_backDeployed_availability_visionos.swift | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) rename test/{attr => SILGen}/back_deployed_attr_func_visionos.swift (90%) diff --git a/lib/AST/Availability.cpp b/lib/AST/Availability.cpp index 32ad168dad53d..9a796516bcdd5 100644 --- a/lib/AST/Availability.cpp +++ b/lib/AST/Availability.cpp @@ -365,7 +365,8 @@ bool AvailabilityInference::updateBeforeAvailabilityDomainForFallback( const BackDeployedAttr *attr, const ASTContext &ctx, AvailabilityDomain &domain, llvm::VersionTuple &platformVer) { bool hasRemap = false; - auto remappedDomain = domain.getRemappedDomain(ctx, hasRemap); + auto remappedDomain = AvailabilityDomain::forPlatform(attr->Platform) + .getRemappedDomain(ctx, hasRemap); if (!hasRemap) return false; diff --git a/test/attr/back_deployed_attr_func_visionos.swift b/test/SILGen/back_deployed_attr_func_visionos.swift similarity index 90% rename from test/attr/back_deployed_attr_func_visionos.swift rename to test/SILGen/back_deployed_attr_func_visionos.swift index bd3d88aaa1330..93068623eb694 100644 --- a/test/attr/back_deployed_attr_func_visionos.swift +++ b/test/SILGen/back_deployed_attr_func_visionos.swift @@ -1,5 +1,5 @@ // RUN: %target-swift-emit-sil -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-xros1.0 -verify -// RUN: %target-swift-emit-silgen -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-xros1.0 | %FileCheck %s +// RUN: %target-swift-emit-silgen -Xllvm -sil-print-types -parse-as-library -module-name back_deploy %s -target %target-cpu-apple-xros1.0 | %FileCheck %s // REQUIRES: OS=xros @@ -10,7 +10,7 @@ // CHECK: return [[RESULT]] : $() // -- Back deployment thunk for trivialFunc() -// CHECK-LABEL: sil non_abi [serialized] [thunk] [ossa] @$s11back_deploy11trivialFuncyyFTwb : $@convention(thin) () -> () +// CHECK-LABEL: sil non_abi [serialized] [back_deployed_thunk] [ossa] @$s11back_deploy11trivialFuncyyFTwb : $@convention(thin) () -> () // CHECK: bb0: // CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 2 // CHECK: [[MINOR:%.*]] = integer_literal $Builtin.Word, 0 @@ -45,7 +45,7 @@ public func trivialFunc() {} // CHECK: return [[RESULT]] : $() // -- Back deployment thunk for trivialFunc_iOS() -// CHECK-LABEL: sil non_abi [serialized] [thunk] [ossa] @$s11back_deploy15trivialFunc_iOSyyFTwb : $@convention(thin) () -> () +// CHECK-LABEL: sil non_abi [serialized] [back_deployed_thunk] [ossa] @$s11back_deploy15trivialFunc_iOSyyFTwb : $@convention(thin) () -> () // CHECK: bb0: // CHECK: [[MAJOR:%.*]] = integer_literal $Builtin.Word, 1 // CHECK: [[MINOR:%.*]] = integer_literal $Builtin.Word, 1 diff --git a/test/attr/attr_backDeployed_availability_visionos.swift b/test/attr/attr_backDeployed_availability_visionos.swift index 29140b53d1954..53b7fcef8630e 100644 --- a/test/attr/attr_backDeployed_availability_visionos.swift +++ b/test/attr/attr_backDeployed_availability_visionos.swift @@ -1,6 +1,6 @@ -// RUN: %target-typecheck-verify-swift -parse-as-library - -// REQUIRES: OS=xros +// RUN: %empty-directory(%t/mock-sdk) +// RUN: cp %S/../Inputs/MockPlatformRemapSDKConfig/SDKSettings.json %t/mock-sdk/SDKSettings.json +// RUN: %swift -typecheck -verify -parse-stdlib -target arm64-apple-xros1.0 %s -sdk %t/mock-sdk @backDeployed(before: visionOS 2) // Ok, introduced availability is inferred to be visionOS epoch public func topLevelFunc() {} @@ -51,7 +51,7 @@ public func availableSameVersionAsBackDeploymentAndAlsoAvailableEarlierOniOS() { @backDeployed(before: visionOS 2) // expected-error {{'@backDeployed' has no effect because 'availableAfterBackDeployment()' is not available before visionOS 2}} public func availableAfterBackDeployment() {} -@available(iOS 99, *) // expected-note {{'availableOniOSAfterBackDeploymentOniOS()' was introduced in visionOS 99}} +@available(iOS 99, *) // expected-note {{'availableOniOSAfterBackDeploymentOniOS()' was introduced in iOS 99}} @backDeployed(before: iOS 17.4) // expected-error {{'@backDeployed' has no effect because 'availableOniOSAfterBackDeploymentOniOS()' is not available before visionOS 1.1}} public func availableOniOSAfterBackDeploymentOniOS() {}