@@ -161,6 +161,14 @@ class RequirementBuilder {
161161
162162} // end namespace
163163
164+ static Type replaceTypeParametersWithErrorTypes (Type type) {
165+ return type.transformRec ([](Type t) -> Optional<Type> {
166+ if (t->isTypeParameter ())
167+ return ErrorType::get (t->getASTContext ());
168+ return None;
169+ });
170+ }
171+
164172void RequirementBuilder::addRequirementRules (ArrayRef<unsigned > rules) {
165173 // Convert a rewrite rule into a requirement.
166174 auto createRequirementFromRule = [&](const Rule &rule) {
@@ -192,6 +200,8 @@ void RequirementBuilder::addRequirementRules(ArrayRef<unsigned> rules) {
192200 prop->getConcreteType (),
193201 prop->getSubstitutions (),
194202 GenericParams, MutableTerm ());
203+ if (rule.isRecursive ())
204+ superclassType = replaceTypeParametersWithErrorTypes (superclassType);
195205
196206 if (ReconstituteSugar)
197207 superclassType = superclassType->reconstituteSugar (/* recursive=*/ true );
@@ -213,6 +223,8 @@ void RequirementBuilder::addRequirementRules(ArrayRef<unsigned> rules) {
213223 prop->getConcreteType (),
214224 prop->getSubstitutions (),
215225 GenericParams, MutableTerm ());
226+ if (rule.isRecursive ())
227+ concreteType = replaceTypeParametersWithErrorTypes (concreteType);
216228
217229 if (ReconstituteSugar)
218230 concreteType = concreteType->reconstituteSugar (/* recursive=*/ true );
@@ -283,6 +295,8 @@ void RequirementBuilder::addTypeAliasRules(ArrayRef<unsigned> rules) {
283295 prop->getConcreteType (),
284296 prop->getSubstitutions (),
285297 GenericParams, MutableTerm ());
298+ if (rule.isRecursive ())
299+ concreteType = replaceTypeParametersWithErrorTypes (concreteType);
286300
287301 if (ReconstituteSugar)
288302 concreteType = concreteType->reconstituteSugar (/* recursive=*/ true );
0 commit comments