[GSB] Switch resolveDependentMemberTypes() off of resolveArchetype().

We want to do the lookup into the parent equivalence class here.
This commit is contained in:
Doug Gregor
2017-09-25 16:04:59 -07:00
parent 7867c6940f
commit 8c8d19218b

View File

@@ -5809,12 +5809,24 @@ static Type resolveDependentMemberTypes(GenericSignatureBuilder &builder,
if (auto depTy = dyn_cast<DependentMemberType>(type)) {
if (depTy->getAssocType()) return None;
auto pa = builder.resolveArchetype(
type, ArchetypeResolutionKind::CompleteWellFormed);
if (!pa)
Type newBase = resolveDependentMemberTypes(builder, depTy->getBase());
auto parentEquivClass =
builder.resolveEquivalenceClass(
newBase,
ArchetypeResolutionKind::CompleteWellFormed);
if (!parentEquivClass)
return ErrorType::get(depTy);
return pa->getDependentType({ });
auto memberType = parentEquivClass->lookupNestedType(depTy->getName());
if (!memberType)
return ErrorType::get(depTy);
if (auto assocType = dyn_cast<AssociatedTypeDecl>(memberType))
return Type(DependentMemberType::get(newBase, assocType));
// FIXME: This is a weird case, because the type is concrete.
return Type(type);
}
return None;