@@ -489,7 +489,8 @@ bool GenericSignature::requiresClass(Type type, ModuleDecl &mod) {
489
489
if (!type->isTypeParameter ()) return false ;
490
490
491
491
auto &builder = *getGenericSignatureBuilder (mod);
492
- auto pa = builder.resolveArchetype (type);
492
+ auto pa =
493
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
493
494
if (!pa) return false ;
494
495
495
496
pa = pa->getRepresentative ();
@@ -519,7 +520,8 @@ Type GenericSignature::getSuperclassBound(Type type, ModuleDecl &mod) {
519
520
if (!type->isTypeParameter ()) return nullptr ;
520
521
521
522
auto &builder = *getGenericSignatureBuilder (mod);
522
- auto pa = builder.resolveArchetype (type);
523
+ auto pa =
524
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
523
525
if (!pa) return nullptr ;
524
526
525
527
pa = pa->getRepresentative ();
@@ -539,7 +541,8 @@ SmallVector<ProtocolDecl *, 2> GenericSignature::getConformsTo(Type type,
539
541
if (!type->isTypeParameter ()) return { };
540
542
541
543
auto &builder = *getGenericSignatureBuilder (mod);
542
- auto pa = builder.resolveArchetype (type);
544
+ auto pa =
545
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
543
546
if (!pa) return { };
544
547
545
548
pa = pa->getRepresentative ();
@@ -565,7 +568,8 @@ bool GenericSignature::conformsToProtocol(Type type, ProtocolDecl *proto,
565
568
if (!type->isTypeParameter ()) return false ;
566
569
567
570
auto &builder = *getGenericSignatureBuilder (mod);
568
- auto pa = builder.resolveArchetype (type);
571
+ auto pa =
572
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
569
573
if (!pa) return false ;
570
574
571
575
pa = pa->getRepresentative ();
@@ -593,7 +597,8 @@ Type GenericSignature::getConcreteType(Type type, ModuleDecl &mod) {
593
597
if (!type->isTypeParameter ()) return Type ();
594
598
595
599
auto &builder = *getGenericSignatureBuilder (mod);
596
- auto pa = builder.resolveArchetype (type);
600
+ auto pa =
601
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
597
602
if (!pa) return Type ();
598
603
599
604
pa = pa->getRepresentative ();
@@ -607,7 +612,8 @@ LayoutConstraint GenericSignature::getLayoutConstraint(Type type,
607
612
if (!type->isTypeParameter ()) return LayoutConstraint ();
608
613
609
614
auto &builder = *getGenericSignatureBuilder (mod);
610
- auto pa = builder.resolveArchetype (type);
615
+ auto pa =
616
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
611
617
if (!pa) return LayoutConstraint ();
612
618
613
619
pa = pa->getRepresentative ();
@@ -623,12 +629,16 @@ bool GenericSignature::areSameTypeParameterInContext(Type type1, Type type2,
623
629
return true ;
624
630
625
631
auto &builder = *getGenericSignatureBuilder (mod);
626
- auto pa1 = builder.resolveArchetype (type1);
632
+ auto pa1 =
633
+ builder.resolveArchetype (type1,
634
+ ArchetypeResolutionKind::CompleteWellFormed);
627
635
assert (pa1 && " not a valid dependent type of this signature?" );
628
636
pa1 = pa1->getRepresentative ();
629
637
assert (!pa1->isConcreteType ());
630
638
631
- auto pa2 = builder.resolveArchetype (type2);
639
+ auto pa2 =
640
+ builder.resolveArchetype (type2,
641
+ ArchetypeResolutionKind::CompleteWellFormed);
632
642
assert (pa2 && " not a valid dependent type of this signature?" );
633
643
pa2 = pa2->getRepresentative ();
634
644
assert (!pa2->isConcreteType ());
@@ -667,7 +677,9 @@ bool GenericSignature::isCanonicalTypeInContext(Type type,
667
677
return !type.findIf ([&](Type component) -> bool {
668
678
if (!component->isTypeParameter ()) return false ;
669
679
670
- auto pa = builder.resolveArchetype (component);
680
+ auto pa =
681
+ builder.resolveArchetype (component,
682
+ ArchetypeResolutionKind::CompleteWellFormed);
671
683
if (!pa) return false ;
672
684
673
685
auto rep = pa->getArchetypeAnchor (builder);
@@ -692,7 +704,9 @@ CanType GenericSignature::getCanonicalTypeInContext(Type type,
692
704
693
705
// Resolve the potential archetype. This can be null in nested generic
694
706
// types, which we can't immediately canonicalize.
695
- auto pa = builder.resolveArchetype (Type (component));
707
+ auto pa =
708
+ builder.resolveArchetype (Type (component),
709
+ ArchetypeResolutionKind::CompleteWellFormed);
696
710
if (!pa) return None;
697
711
698
712
auto rep = pa->getArchetypeAnchor (builder);
@@ -768,7 +782,8 @@ ConformanceAccessPath GenericSignature::getConformanceAccessPath(
768
782
769
783
// Resolve this type to a potential archetype.
770
784
auto &builder = *getGenericSignatureBuilder (mod);
771
- auto pa = builder.resolveArchetype (type);
785
+ auto pa =
786
+ builder.resolveArchetype (type, ArchetypeResolutionKind::CompleteWellFormed);
772
787
auto equivClass = pa->getOrCreateEquivalenceClass ();
773
788
774
789
// Dig out the conformance of this type to the given protocol, because we
@@ -859,7 +874,11 @@ ConformanceAccessPath GenericSignature::getConformanceAccessPath(
859
874
Type storedType = eraseAssociatedTypes (source->getStoredType ());
860
875
861
876
// Dig out the potential archetype for this stored type.
862
- auto pa = reqSigBuilder.resolveArchetype (storedType);
877
+ // FIXME: CompleteWellFormed here?
878
+ auto pa =
879
+ reqSigBuilder.resolveArchetype (
880
+ storedType,
881
+ ArchetypeResolutionKind::AlwaysPartial);
863
882
auto equivClass = pa->getOrCreateEquivalenceClass ();
864
883
865
884
// Find the conformance of this potential archetype to the protocol in
0 commit comments