Skip to content

Commit 3601399

Browse files
committed
Propagate '-application-extension' to module interface loader sub-invocations.
This flag restricts availability of certain symbols to ensure the code cannot use declarations that are explicitly unavalable to extensions. This restriction should be passed down to dependency modules also.
1 parent af276b7 commit 3601399

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

lib/Frontend/ModuleInterfaceLoader.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,11 @@ InterfaceSubContextDelegateImpl::InterfaceSubContextDelegateImpl(
15591559
genericSubInvocation.getFrontendOptions().DisableImplicitModules = true;
15601560
GenericArgs.push_back("-disable-implicit-swift-modules");
15611561
}
1562+
// If building an application extension, make sure API use
1563+
// is restricted accordingly in downstream dependnecies.
1564+
if (langOpts.EnableAppExtensionRestrictions) {
1565+
GenericArgs.push_back("-application-extension");
1566+
}
15621567
// Save the parent invocation's Target Triple
15631568
ParentInvocationTarget = langOpts.Target;
15641569

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
@available(macOS 10.0, *)
2+
public func extensionAvailable() {
3+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// REQUIRES: OS=macosx
2+
// RUN: %empty-directory(%t)
3+
4+
// RUN: %target-swift-emit-module-interface(%t/ExtensionAvailable.swiftinterface) %S/Inputs/extension-available.swift -module-name ExtensionAvailable -I%t -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
5+
6+
// RUN: %target-swift-frontend -scan-dependencies %s -o %t/deps.json -I%t -application-extension -disable-implicit-concurrency-module-import -disable-implicit-string-processing-module-import
7+
// RUN: %FileCheck %s < %t/deps.json
8+
9+
import ExtensionAvailable
10+
func foo() {
11+
extensionAvailable()
12+
}
13+
14+
// CHECK: "directDependencies": [
15+
// CHECK-NEXT: {
16+
// CHECK-NEXT: "swift": "ExtensionAvailable"
17+
// CHECK-NEXT: },
18+
// CHECK-NEXT: {
19+
// CHECK-NEXT: "swift": "Swift"
20+
// CHECK-NEXT: },
21+
// CHECK-NEXT: {
22+
// CHECK-NEXT: "swift": "SwiftOnoneSupport"
23+
// CHECK-NEXT: }
24+
// CHECK-NEXT: ],
25+
26+
27+
// CHECK: "swift": "ExtensionAvailable"
28+
// CHECK-NEXT: },
29+
// CHECK-NEXT: {
30+
// CHECK-NEXT: "modulePath": "ExtensionAvailable.swiftmodule",
31+
// CHECK-NEXT: "sourceFiles": [
32+
// CHECK-NEXT: ],
33+
// CHECK-NEXT: "directDependencies": [
34+
// CHECK-NEXT: {
35+
// CHECK-NEXT: "swift": "Swift"
36+
// CHECK-NEXT: },
37+
// CHECK-NEXT: {
38+
// CHECK-NEXT: "swift": "SwiftOnoneSupport"
39+
// CHECK-NEXT: }
40+
// CHECK-NEXT: ],
41+
// CHECK-NEXT: "details": {
42+
// CHECK-NEXT: "swift": {
43+
// CHECK-NEXT: "moduleInterfacePath":
44+
// CHECK-NEXT: "contextHash":
45+
// CHECK-NEXT: "commandLine": [
46+
// CHECK-NEXT: "-frontend",
47+
// CHECK-NEXT: "-compile-module-from-interface",
48+
// CHECK: "-application-extension",

0 commit comments

Comments
 (0)