Skip to content

Commit bc4efe5

Browse files
committed
[Sema] Always error on public uses of conformance from @_spiOnly import
1 parent 6d9b82b commit bc4efe5

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

lib/Sema/ResilienceDiagnostics.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,8 @@ TypeChecker::diagnoseConformanceExportability(SourceLoc loc,
255255
M->getName(),
256256
static_cast<unsigned>(originKind))
257257
.warnUntilSwiftVersionIf((useConformanceAvailabilityErrorsOption &&
258-
!ctx.LangOpts.EnableConformanceAvailabilityErrors) ||
258+
!ctx.LangOpts.EnableConformanceAvailabilityErrors &&
259+
originKind != DisallowedOriginKind::SPIOnly) ||
259260
originKind == DisallowedOriginKind::ImplicitlyImported,
260261
6);
261262

test/SPI/spi-only-import-exportability.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ public func publicInlinableUser() {
118118

119119
let p: PublicType = PublicType()
120120
p.spiOnlyExtensionMethod() // expected-error {{instance method 'spiOnlyExtensionMethod()' cannot be used in an '@inlinable' function because 'SPIOnlyImportedLib' was imported for SPI only}}
121+
conformanceUse(p) // expected-error{{cannot use conformance of 'PublicType' to 'PublicProtocol' here; 'SPIOnlyImportedLib' was imported for SPI only}}
121122
}
122123
#endif
123124

@@ -131,6 +132,7 @@ public func spiInlinableUser() {
131132

132133
let p: PublicType = PublicType()
133134
p.spiOnlyExtensionMethod()
135+
conformanceUse(p)
134136
}
135137

136138
public func implementationDetailsUser() {
@@ -142,6 +144,7 @@ public func implementationDetailsUser() {
142144

143145
let p: PublicType = PublicType()
144146
p.spiOnlyExtensionMethod()
147+
conformanceUse(p)
145148
}
146149

147150
public struct ClientStruct {

0 commit comments

Comments
 (0)