Skip to content

Commit d795ea7

Browse files
authored
Merge pull request #35404 from slavapestov/archetype-nested-type-is-fully-concrete-5.4
GSB: Handle concrete ResolvedTypes in ArchetypeType::resolveNestedType() [5.4]
2 parents 88560df + faaa200 commit d795ea7

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

lib/AST/GenericSignatureBuilder.cpp

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2633,16 +2633,24 @@ void ArchetypeType::resolveNestedType(
26332633
Type interfaceType = getInterfaceType();
26342634
Type memberInterfaceType =
26352635
DependentMemberType::get(interfaceType, nested.first);
2636-
auto equivClass =
2637-
builder.resolveEquivalenceClass(
2636+
auto resolved =
2637+
builder.maybeResolveEquivalenceClass(
26382638
memberInterfaceType,
2639-
ArchetypeResolutionKind::CompleteWellFormed);
2640-
if (!equivClass) {
2639+
ArchetypeResolutionKind::CompleteWellFormed,
2640+
/*wantExactPotentialArchetype=*/false);
2641+
if (!resolved) {
26412642
nested.second = ErrorType::get(interfaceType);
26422643
return;
26432644
}
26442645

2645-
auto result = equivClass->getTypeInContext(builder, genericEnv);
2646+
Type result;
2647+
if (auto concrete = resolved.getAsConcreteType()) {
2648+
result = concrete;
2649+
} else {
2650+
auto *equivClass = resolved.getEquivalenceClass(builder);
2651+
result = equivClass->getTypeInContext(builder, genericEnv);
2652+
}
2653+
26462654
assert(!nested.second ||
26472655
nested.second->isEqual(result) ||
26482656
(nested.second->hasError() && result->hasError()));
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// RUN: %target-swift-frontend -typecheck %s
2+
3+
// https://bugs.swift.org/browse/SR-13519
4+
5+
class Class: P {
6+
typealias A = Bool
7+
}
8+
9+
protocol P {
10+
associatedtype A
11+
}
12+
13+
protocol Q : P {
14+
func takesA(arg: A)
15+
}
16+
17+
func test<T: Class & Q>(arg: T) {
18+
arg.takesA(arg: true)
19+
}

0 commit comments

Comments
 (0)