Skip to content

Commit 5221e7b

Browse files
authored
[APIGen] Mark symbols from non-API level library as private (#85553)
All symbols are private (as in the API descriptor) if the library level is more restricted than `LibraryLevel::API`. Resolves rdar://164901718 <!-- If this pull request is targeting a release branch, please fill out the following form: https://github.com/swiftlang/.github/blob/main/PULL_REQUEST_TEMPLATE/release.md?plain=1 Otherwise, replace this comment with a description of your changes and rationale. Provide links to external references/discussions if appropriate. If this pull request resolves any GitHub issues, link them like so: Resolves <link to issue>, resolves <link to another issue>. For more information about linking a pull request to an issue, see: https://docs.github.com/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue --> <!-- Before merging this pull request, you must run the Swift continuous integration tests. For information about triggering CI builds via @swift-ci, see: https://github.com/apple/swift/blob/main/docs/ContinuousIntegration.md#swift-ci Thank you for your contribution to Swift! -->
1 parent 674e7da commit 5221e7b

File tree

9 files changed

+267
-12
lines changed

9 files changed

+267
-12
lines changed

lib/IRGen/TBDGen.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -705,6 +705,11 @@ class APIGenRecorder final : public APIRecorder {
705705
bool isSPI(const Decl *decl) {
706706
assert(decl);
707707

708+
// If the module's library level is more restricted than API, all symbols
709+
// should be SPIs.
710+
if (module->getLibraryLevel() < swift::LibraryLevel::API)
711+
return true;
712+
708713
if (auto value = dyn_cast<ValueDecl>(decl)) {
709714
auto accessScope =
710715
value->getFormalAccessScope(/*useDC=*/nullptr,

test/APIJSON/apigen.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// REQUIRES: objc_interop, OS=macosx
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
4-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -package-name MyModule -swift-version 5
5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -package-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -package-name MyModule -swift-version 5 -library-level api
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -package-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -library-level api
66
// RUN: %validate-json %t/api.json | %FileCheck %s
77

88
import Foundation

test/APIJSON/availability.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// REQUIRES: objc_interop, OS=macosx
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
4-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -target arm64-apple-macos12
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -target arm64-apple-macos12 -library-level api
55
// RUN: %validate-json %t/api.json | %FileCheck %s
66

77
@available(iOS 13.0, *)

test/APIJSON/extension.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// REQUIRES: objc_interop, OS=macosx
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
4-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5
5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -library-level api
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -library-level api
66
// RUN: %validate-json %t/api.json | %FileCheck %s
77

88
import Foundation

test/APIJSON/library-level.swift

Lines changed: 250 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,250 @@
1+
// REQUIRES: objc_interop, OS=macosx
2+
// RUN: %empty-directory(%t)
3+
// RUN: %empty-directory(%t/ModuleCache)
4+
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/none.json -target arm64-apple-macos26
6+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -target arm64-apple-macos26 -library-level api
7+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/spi.json -target arm64-apple-macos26 -library-level spi
8+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/ipi.json -target arm64-apple-macos26 -library-level ipi
9+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/other.json -target arm64-apple-macos26 -library-level other
10+
// RUN: %validate-json %t/api.json | %FileCheck %s --check-prefixes CHECK,API
11+
// RUN: %validate-json %t/none.json | %FileCheck %s --check-prefixes CHECK,NON-API
12+
// RUN: %validate-json %t/spi.json | %FileCheck %s --check-prefixes CHECK,NON-API
13+
// RUN: %validate-json %t/ipi.json | %FileCheck %s --check-prefixes CHECK,NON-API
14+
// RUN: %validate-json %t/other.json | %FileCheck %s --check-prefixes CHECK,NON-API
15+
16+
import Foundation
17+
18+
@_spi(Experimental) public func newUnprovenFunc() {}
19+
@_spi(Experimental) public class MyClass : NSObject {
20+
@objc public func spiMethod() {}
21+
}
22+
23+
public class MyClass2 : NSObject {
24+
@_spi(Experimental) @objc public func spiMethod() {}
25+
26+
@_spi_available(macOS 10.10, tvOS 14.0, *)
27+
@available(iOS 8.0, *)
28+
@objc public func spiAvailableMethod() {}
29+
}
30+
31+
@_spi_available(macOS 10.10, tvOS 14.0, *)
32+
@available(iOS 8.0, *)
33+
public func spiAvailableFunc() {}
34+
35+
// CHECK: {
36+
// CHECK-NEXT: "target": "arm64-apple-macos26",
37+
// CHECK-NEXT: "globals": [
38+
// CHECK-NEXT: {
39+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassC9spiMethodyyFTj",
40+
// CHECK-NEXT: "access": "private",
41+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
42+
// CHECK-NEXT: "linkage": "exported"
43+
// CHECK-NEXT: },
44+
// CHECK-NEXT: {
45+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassC9spiMethodyyFTq",
46+
// CHECK-NEXT: "access": "private",
47+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
48+
// CHECK-NEXT: "linkage": "exported"
49+
// CHECK-NEXT: },
50+
// CHECK-NEXT: {
51+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCACycfC",
52+
// CHECK-NEXT: "access": "private",
53+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
54+
// CHECK-NEXT: "linkage": "exported"
55+
// CHECK-NEXT: },
56+
// CHECK-NEXT: {
57+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCACycfc",
58+
// CHECK-NEXT: "access": "private",
59+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
60+
// CHECK-NEXT: "linkage": "exported"
61+
// CHECK-NEXT: },
62+
// CHECK-NEXT: {
63+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCMa",
64+
// CHECK-NEXT: "access": "private",
65+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
66+
// CHECK-NEXT: "linkage": "exported"
67+
// CHECK-NEXT: },
68+
// CHECK-NEXT: {
69+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCMn",
70+
// CHECK-NEXT: "access": "private",
71+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
72+
// CHECK-NEXT: "linkage": "exported"
73+
// CHECK-NEXT: },
74+
// CHECK-NEXT: {
75+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCMo",
76+
// CHECK-NEXT: "access": "private",
77+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
78+
// CHECK-NEXT: "linkage": "exported"
79+
// CHECK-NEXT: },
80+
// CHECK-NEXT: {
81+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCMu",
82+
// CHECK-NEXT: "access": "private",
83+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
84+
// CHECK-NEXT: "linkage": "exported"
85+
// CHECK-NEXT: },
86+
// CHECK-NEXT: {
87+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCN",
88+
// CHECK-NEXT: "access": "private",
89+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
90+
// CHECK-NEXT: "linkage": "exported"
91+
// CHECK-NEXT: },
92+
// CHECK-NEXT: {
93+
// CHECK-NEXT: "name": "_$s8MyModule0A5ClassCfD",
94+
// CHECK-NEXT: "access": "private",
95+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
96+
// CHECK-NEXT: "linkage": "exported"
97+
// CHECK-NEXT: },
98+
// CHECK-NEXT: {
99+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2C18spiAvailableMethodyyFTj",
100+
// CHECK-NEXT: "access": "private",
101+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
102+
// CHECK-NEXT: "linkage": "exported",
103+
// CHECK-NEXT: "introduced": "10.10",
104+
// CHECK-NEXT: "SPIAvailable": true
105+
// CHECK-NEXT: },
106+
// CHECK-NEXT: {
107+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2C18spiAvailableMethodyyFTq",
108+
// CHECK-NEXT: "access": "private",
109+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
110+
// CHECK-NEXT: "linkage": "exported",
111+
// CHECK-NEXT: "introduced": "10.10",
112+
// CHECK-NEXT: "SPIAvailable": true
113+
// CHECK-NEXT: },
114+
// CHECK-NEXT: {
115+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2C9spiMethodyyFTj",
116+
// CHECK-NEXT: "access": "private",
117+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
118+
// CHECK-NEXT: "linkage": "exported"
119+
// CHECK-NEXT: },
120+
// CHECK-NEXT: {
121+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2C9spiMethodyyFTq",
122+
// CHECK-NEXT: "access": "private",
123+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
124+
// CHECK-NEXT: "linkage": "exported"
125+
// CHECK-NEXT: },
126+
// CHECK-NEXT: {
127+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CACycfC",
128+
// API-NEXT: "access": "public",
129+
// NON-API-NEXT: "access": "private",
130+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
131+
// CHECK-NEXT: "linkage": "exported"
132+
// CHECK-NEXT: },
133+
// CHECK-NEXT: {
134+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CACycfc",
135+
// API-NEXT: "access": "public",
136+
// NON-API-NEXT: "access": "private",
137+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
138+
// CHECK-NEXT: "linkage": "exported"
139+
// CHECK-NEXT: },
140+
// CHECK-NEXT: {
141+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CMa",
142+
// API-NEXT: "access": "public",
143+
// NON-API-NEXT: "access": "private",
144+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
145+
// CHECK-NEXT: "linkage": "exported"
146+
// CHECK-NEXT: },
147+
// CHECK-NEXT: {
148+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CMn",
149+
// API-NEXT: "access": "public",
150+
// NON-API-NEXT: "access": "private",
151+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
152+
// CHECK-NEXT: "linkage": "exported"
153+
// CHECK-NEXT: },
154+
// CHECK-NEXT: {
155+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CMo",
156+
// API-NEXT: "access": "public",
157+
// NON-API-NEXT: "access": "private",
158+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
159+
// CHECK-NEXT: "linkage": "exported"
160+
// CHECK-NEXT: },
161+
// CHECK-NEXT: {
162+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CMu",
163+
// API-NEXT: "access": "public",
164+
// NON-API-NEXT: "access": "private",
165+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
166+
// CHECK-NEXT: "linkage": "exported"
167+
// CHECK-NEXT: },
168+
// CHECK-NEXT: {
169+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CN",
170+
// API-NEXT: "access": "public",
171+
// NON-API-NEXT: "access": "private",
172+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
173+
// CHECK-NEXT: "linkage": "exported"
174+
// CHECK-NEXT: },
175+
// CHECK-NEXT: {
176+
// CHECK-NEXT: "name": "_$s8MyModule0A6Class2CfD",
177+
// API-NEXT: "access": "public",
178+
// NON-API-NEXT: "access": "private",
179+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
180+
// CHECK-NEXT: "linkage": "exported"
181+
// CHECK-NEXT: },
182+
// CHECK-NEXT: {
183+
// CHECK-NEXT: "name": "_$s8MyModule15newUnprovenFuncyyF",
184+
// CHECK-NEXT: "access": "private",
185+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
186+
// CHECK-NEXT: "linkage": "exported"
187+
// CHECK-NEXT: },
188+
// CHECK-NEXT: {
189+
// CHECK-NEXT: "name": "_$s8MyModule16spiAvailableFuncyyF",
190+
// CHECK-NEXT: "access": "private",
191+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
192+
// CHECK-NEXT: "linkage": "exported",
193+
// CHECK-NEXT: "introduced": "10.10",
194+
// CHECK-NEXT: "SPIAvailable": true
195+
// CHECK-NEXT: }
196+
// CHECK-NEXT: ],
197+
// CHECK-NEXT: "interfaces": [
198+
// CHECK-NEXT: {
199+
// CHECK-NEXT: "name": "_TtC8MyModule7MyClass",
200+
// CHECK-NEXT: "access": "private",
201+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
202+
// CHECK-NEXT: "linkage": "exported",
203+
// CHECK-NEXT: "super": "NSObject",
204+
// CHECK-NEXT: "instanceMethods": [
205+
// CHECK-NEXT: {
206+
// CHECK-NEXT: "name": "spiMethod",
207+
// CHECK-NEXT: "access": "private",
208+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift"
209+
// CHECK-NEXT: },
210+
// CHECK-NEXT: {
211+
// CHECK-NEXT: "name": "init",
212+
// CHECK-NEXT: "access": "private",
213+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift"
214+
// CHECK-NEXT: }
215+
// CHECK-NEXT: ],
216+
// CHECK-NEXT: "classMethods": []
217+
// CHECK-NEXT: },
218+
// CHECK-NEXT: {
219+
// CHECK-NEXT: "name": "_TtC8MyModule8MyClass2",
220+
// API-NEXT: "access": "public",
221+
// NON-API-NEXT: "access": "private",
222+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
223+
// CHECK-NEXT: "linkage": "exported",
224+
// CHECK-NEXT: "super": "NSObject",
225+
// CHECK-NEXT: "instanceMethods": [
226+
// CHECK-NEXT: {
227+
// CHECK-NEXT: "name": "spiMethod",
228+
// CHECK-NEXT: "access": "private",
229+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift"
230+
// CHECK-NEXT: },
231+
// CHECK-NEXT: {
232+
// CHECK-NEXT: "name": "spiAvailableMethod",
233+
// CHECK-NEXT: "access": "private",
234+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift",
235+
// CHECK-NEXT: "introduced": "10.10",
236+
// CHECK-NEXT: "SPIAvailable": true
237+
// CHECK-NEXT: },
238+
// CHECK-NEXT: {
239+
// CHECK-NEXT: "name": "init",
240+
// API-NEXT: "access": "public",
241+
// NON-API-NEXT: "access": "private",
242+
// CHECK-NEXT: "file": "SOURCE_DIR/test/APIJSON/library-level.swift"
243+
// CHECK-NEXT: }
244+
// CHECK-NEXT: ],
245+
// CHECK-NEXT: "classMethods": []
246+
// CHECK-NEXT: }
247+
// CHECK-NEXT: ],
248+
// CHECK-NEXT: "categories": [],
249+
// CHECK-NEXT: "version": "1.0"
250+
// CHECK-NEXT: }

test/APIJSON/non-objc-class.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// REQUIRES: objc_interop, OS=macosx
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
4-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5
5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json
4+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -library-level api
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -library-level api
66
// RUN: %validate-json %t/api.json | %FileCheck %s
77

88
import Foundation

test/APIJSON/objc-implement.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
44
// RUN: split-file %s %t
5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %t/objc-implement.swift -typecheck -parse-as-library -emit-module-interface-path %t/ObjcImplement.swiftinterface -enable-library-evolution -module-name ObjcImplement -import-underlying-module -swift-version 5 -emit-api-descriptor-path %t/api.json
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %t/objc-implement.swift -typecheck -parse-as-library -emit-module-interface-path %t/ObjcImplement.swiftinterface -enable-library-evolution -module-name ObjcImplement -import-underlying-module -swift-version 5 -emit-api-descriptor-path %t/api.json -library-level api
66
// RUN: %validate-json %t/api.json | %FileCheck %s
77

88
//--- objc-implement.swift

test/APIJSON/spi.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
44

5-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5
6-
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -target arm64-apple-macos26
5+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -library-level api
6+
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk-nosource -I %t) %s -parse-as-library -emit-module -emit-module-path %t/MyModule.swiftmodule -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -target arm64-apple-macos26 -library-level api
77
// RUN: %validate-json %t/api.json | %FileCheck %s
88

99
import Foundation

test/APIJSON/struct.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// REQUIRES: objc_interop, OS=macosx
22
// RUN: %empty-directory(%t)
33
// RUN: %empty-directory(%t/ModuleCache)
4-
// RUN: %target-swift-frontend %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5
5-
// RUN: %target-swift-frontend %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json
4+
// RUN: %target-swift-frontend %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -library-level api
5+
// RUN: %target-swift-frontend %s -typecheck -parse-as-library -emit-module-interface-path %t/MyModule.swiftinterface -enable-library-evolution -module-name MyModule -swift-version 5 -emit-api-descriptor-path %t/api.json -library-level api
66
// RUN: %validate-json %t/api.json | %FileCheck %s
77

88
// Struct has no objc data.

0 commit comments

Comments
 (0)