Skip to content

Commit e04dac5

Browse files
committed
Sema: Embedded can reference typealiases to non-publicly imported types
1 parent 3fedebf commit e04dac5

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

lib/Sema/ResilienceDiagnostics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ static bool diagnoseTypeAliasDeclRefExportability(SourceLoc loc,
174174
auto ignoredDowngradeToWarning = DowngradeToWarning::No;
175175
auto originKind =
176176
getDisallowedOriginKind(D, where, ignoredDowngradeToWarning);
177-
if (originKind == DisallowedOriginKind::None)
177+
if (where.canReferenceOrigin(originKind))
178178
return false;
179179

180180
// As an exception, if the import of the module that defines the desugared

test/Sema/access-level-import-embedded.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import indirects
2424

2525
internal func localInternalFunc() {} // expected-note {{global function 'localInternalFunc()' is not '@usableFromInline' or public}}
2626

27+
typealias AliasToDirect = StructFromDirect
28+
2729
@inlinable
2830
public func explicitlyInlinable(arg: StructFromDirect = StructFromDirect()) {
2931
// expected-error @-1 {{initializer 'init()' is internal and cannot be referenced from a default argument value}}
@@ -75,6 +77,8 @@ public func implicitlyInlinablePublic(arg: StructFromDirect = StructFromDirect()
7577
implicitlyInlinablePublic()
7678
implicitlyInlinablePrivate()
7779
explicitNonInliable()
80+
81+
let _: AliasToDirect
7882
}
7983

8084
internal func implicitlyInlinablePrivate(arg: StructFromDirect = StructFromDirect()) {

test/Sema/implementation-only-import-embedded.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@ internal func localInternalFunc() {} // expected-note {{global function 'localIn
2626

2727
@_spi(S) public func localSPI() {}
2828

29+
typealias AliasToDirect = StructFromDirect
30+
2931
@inlinable
3032
public func explicitlyInlinable(arg: StructFromDirect = StructFromDirect()) {
3133
// expected-error @-1 {{initializer 'init()' cannot be used in a default argument value because 'directs' was imported implementation-only}}
@@ -82,6 +84,8 @@ public func implicitlyInlinablePublic(arg: StructFromDirect = StructFromDirect()
8284

8385
localSPI()
8486
spiFunctionFromDirect()
87+
88+
let _: AliasToDirect // expected-error {{AliasToDirect' aliases 'directs.StructFromDirect' and cannot be used in an embedded function not marked '@_neverEmitIntoClient' because 'directs' has been imported as implementation-only}}
8589
}
8690

8791
private func implicitlyInlinablePrivate(arg: StructFromDirect = StructFromDirect()) {

0 commit comments

Comments
 (0)