Skip to content

Commit f56af4e

Browse files
authored
[ParseableInterface] Don't print conformances for non-public types (#20656)
I have nothing to say but "oops".
1 parent 8b9cc18 commit f56af4e

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

lib/Frontend/ParseableInterfaceSupport.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -629,6 +629,9 @@ class InheritedProtocolCollector {
629629
return;
630630
}
631631

632+
if (!isPublicOrUsableFromInline(nominal))
633+
return;
634+
632635
map[nominal].recordProtocols(directlyInherited);
633636

634637
// Recurse to find any nested types.
@@ -647,6 +650,9 @@ class InheritedProtocolCollector {
647650
return;
648651

649652
const NominalTypeDecl *nominal = extension->getExtendedNominal();
653+
if (!isPublicOrUsableFromInline(nominal))
654+
return;
655+
650656
map[nominal].recordConditionalConformances(extension->getInherited());
651657
// No recursion here because extensions are never nested.
652658
}

test/ParseableInterface/conformances.swift

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// RUN: %FileCheck -check-prefix CHECK-END %s < %t.swiftinterface
44
// RUN: %FileCheck -check-prefix NEGATIVE %s < %t.swiftinterface
55

6+
// NEGATIVE-NOT: BAD
7+
68
// CHECK-LABEL: public protocol SimpleProto {
79
public protocol SimpleProto {
810
// CHECK: associatedtype Element
@@ -165,6 +167,20 @@ extension MultiGeneric: PublicProto where U: PrivateProto {}
165167
// CHECK: public struct MultiGeneric<T, U, V> {
166168
// CHECK-END: extension conformances.MultiGeneric : PublicProto where T : _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}
167169

170+
internal struct InternalImpl_BAD: PrivateSubProto {}
171+
internal struct InternalImplConstrained_BAD<T> {}
172+
extension InternalImplConstrained_BAD: PublicProto where T: PublicProto {}
173+
internal struct InternalImplConstrained2_BAD<T> {}
174+
extension InternalImplConstrained2_BAD: PublicProto where T: PrivateProto {}
175+
176+
public struct WrapperForInternal {
177+
internal struct InternalImpl_BAD: PrivateSubProto {}
178+
internal struct InternalImplConstrained_BAD<T> {}
179+
internal struct InternalImplConstrained2_BAD<T> {}
180+
}
181+
extension WrapperForInternal.InternalImplConstrained_BAD: PublicProto where T: PublicProto {}
182+
extension WrapperForInternal.InternalImplConstrained2_BAD: PublicProto where T: PrivateProto {}
183+
168184

169185
// CHECK-END: @usableFromInline
170186
// CHECK-END-NEXT: internal protocol _ConstraintThatIsNotPartOfTheAPIOfThisLibrary {}

0 commit comments

Comments
 (0)