Skip to content

Commit 05645a1

Browse files
authored
Merge pull request swiftlang#38958 from xymus/fix-ioi-proto-composition
[Serialization] Write protocol compositions as dependencies of protocols
2 parents 750ba09 + 3097919 commit 05645a1

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

lib/Serialization/Serialization.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3517,7 +3517,9 @@ class Serializer::DeclSerializer : public DeclVisitor<DeclSerializer> {
35173517
for (auto element : proto->getInherited()) {
35183518
auto elementType = element.getType();
35193519
assert(!elementType || !elementType->hasArchetype());
3520-
if (elementType && elementType->is<ProtocolType>())
3520+
if (elementType &&
3521+
(elementType->is<ProtocolType>() ||
3522+
elementType->is<ProtocolCompositionType>()))
35213523
dependencyTypes.insert(elementType);
35223524
}
35233525

test/Serialization/Recovery/implementation-only-missing.swift

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public protocol HiddenProtocol {
4343
associatedtype Value
4444
}
4545

46+
public protocol HiddenProtocol2 {}
47+
4648
public protocol HiddenProtocolWithOverride {
4749
func hiddenOverride()
4850
}
@@ -98,6 +100,15 @@ public class SomeClass {
98100
func funcUsingIoiType(_ a: HiddenClass) {}
99101
}
100102

103+
// Check that we recover from a reference to an implementation-only
104+
// imported type in a protocol composition. rdar://78631465
105+
protocol CompositionMemberInheriting : HiddenProtocol2 {}
106+
protocol CompositionMemberSimple {}
107+
protocol InheritingFromComposition : CompositionMemberInheriting & CompositionMemberSimple {}
108+
struct StructInheritingFromComposition : CompositionMemberInheriting & CompositionMemberSimple {}
109+
class ClassInheritingFromComposition : CompositionMemberInheriting & CompositionMemberSimple {}
110+
protocol InheritingFromCompositionDirect : CompositionMemberSimple & HiddenProtocol2 {}
111+
101112
#elseif CLIENT_APP
102113

103114
import public_lib

0 commit comments

Comments
 (0)