@@ -492,6 +492,8 @@ class TypeSubstituter : public TypeTransform<TypeSubstituter> {
492492
493493 Type transformPackExpansion (PackExpansionType *expand, TypePosition pos);
494494
495+ Type transformPackElement (PackElementType *element, TypePosition pos);
496+
495497 SubstitutionMap transformSubstitutionMap (SubstitutionMap subs);
496498
497499 CanType transformSILField (CanType fieldTy, TypePosition pos);
@@ -508,14 +510,6 @@ TypeSubstituter::transform(TypeBase *type, TypePosition position) {
508510 " should not be doing AST type-substitution on a lowered SIL type;"
509511 " use SILType::subst" );
510512
511- auto oldLevel = level;
512- SWIFT_DEFER { level = oldLevel; };
513-
514- if (auto elementTy = dyn_cast<PackElementType>(type)) {
515- type = elementTy->getPackType ().getPointer ();
516- level += elementTy->getLevel ();
517- }
518-
519513 // We only substitute for substitutable types and dependent member types.
520514
521515 // For dependent member types, we may need to look up the member if the
@@ -592,6 +586,13 @@ Type TypeSubstituter::transformPackExpansion(PackExpansionType *expand,
592586 return Type (PackType::get (expand->getASTContext (), eltTys));
593587}
594588
589+ Type TypeSubstituter::transformPackElement (PackElementType *element,
590+ TypePosition pos) {
591+ SWIFT_DEFER { level -= element->getLevel (); };
592+ level += element->getLevel ();
593+ return doIt (element->getPackType (), pos);
594+ }
595+
595596SubstitutionMap TypeSubstituter::transformSubstitutionMap (SubstitutionMap subs) {
596597 // FIXME: Take level into account? Move level down into IFS?
597598 return subs.subst (IFS);
0 commit comments