Skip to content

Commit 25b59cb

Browse files
committed
AST: Emit @_backDeploy function bodies into .swiftinterface files.
Resolves rdar://88650341
1 parent f13f3bd commit 25b59cb

File tree

5 files changed

+19
-12
lines changed

5 files changed

+19
-12
lines changed

include/swift/AST/DeclContext.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,7 @@ struct FragileFunctionKind {
201201
AlwaysEmitIntoClient,
202202
DefaultArgument,
203203
PropertyInitializer,
204+
BackDeploy,
204205
None
205206
};
206207

lib/AST/DeclContext.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ ResilienceExpansion DeclContext::getResilienceExpansion() const {
320320
case FragileFunctionKind::AlwaysEmitIntoClient:
321321
case FragileFunctionKind::DefaultArgument:
322322
case FragileFunctionKind::PropertyInitializer:
323+
case FragileFunctionKind::BackDeploy:
323324
return ResilienceExpansion::Minimal;
324325
case FragileFunctionKind::None:
325326
return ResilienceExpansion::Maximal;
@@ -418,6 +419,11 @@ swift::FragileFunctionKindRequest::evaluate(Evaluator &evaluator,
418419
/*allowUsableFromInline=*/true};
419420
}
420421

422+
if (AFD->getAttrs().hasAttribute<BackDeployAttr>()) {
423+
return {FragileFunctionKind::BackDeploy,
424+
/*allowUsableFromInline=*/true};
425+
}
426+
421427
// If a property or subscript is @inlinable or @_alwaysEmitIntoClient,
422428
// the accessors are @inlinable or @_alwaysEmitIntoClient also.
423429
if (auto accessor = dyn_cast<AccessorDecl>(AFD)) {

lib/AST/TypeCheckRequests.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,9 @@ void swift::simple_display(llvm::raw_ostream &out,
560560
case FragileFunctionKind::PropertyInitializer:
561561
out << "propertyInitializer";
562562
break;
563+
case FragileFunctionKind::BackDeploy:
564+
out << "backDeploy";
565+
break;
563566
case FragileFunctionKind::None:
564567
out << "none";
565568
break;

test/ModuleInterface/back-deploy-attr.swift

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,24 @@
1717

1818
public struct TopLevelStruct {
1919
// CHECK: @_backDeploy(macOS 11.0)
20-
// CHECK: public func backDeployedFunc1_SinglePlatform() -> Swift.Int
20+
// FROMSOURCE: public func backDeployedFunc1_SinglePlatform() -> Swift.Int { return 42 }
21+
// FROMMODULE: public func backDeployedFunc1_SinglePlatform() -> Swift.Int
2122
@available(macOS 12.0, *)
2223
@_backDeploy(macOS 11.0)
23-
public func backDeployedFunc1_SinglePlatform() -> Int {
24-
return 42
25-
}
24+
public func backDeployedFunc1_SinglePlatform() -> Int { return 42 }
2625

2726
// CHECK: @_backDeploy(macOS 11.0)
2827
// CHECK: @_backDeploy(iOS 14.0)
29-
// CHECK: public func backDeployedFunc2_MultiPlatform() -> Swift.Int
28+
// FROMSOURCE: public func backDeployedFunc2_MultiPlatform() -> Swift.Int { return 43 }
29+
// FROMMODULE: public func backDeployedFunc2_MultiPlatform() -> Swift.Int
3030
@available(macOS 12.0, *)
3131
@_backDeploy(macOS 11.0, iOS 14.0)
32-
public func backDeployedFunc2_MultiPlatform() -> Int {
33-
return 43
34-
}
32+
public func backDeployedFunc2_MultiPlatform() -> Int { return 43 }
3533
}
3634

3735
// CHECK: @_backDeploy(macOS 11.0)
38-
// CHECK: public func backDeployTopLevelFunc() -> Swift.Int
36+
// FROMSOURCE: public func backDeployTopLevelFunc() -> Swift.Int { return 44 }
37+
// FROMMODULE: public func backDeployTopLevelFunc() -> Swift.Int
3938
@available(macOS 12.0, *)
4039
@_backDeploy(macOS 11.0)
41-
public func backDeployTopLevelFunc() -> Int {
42-
return 42
43-
}
40+
public func backDeployTopLevelFunc() -> Int { return 44 }

test/SILGen/back_deploy_attribute.swift

Whitespace-only changes.

0 commit comments

Comments
 (0)