Skip to content

Commit fcf7948

Browse files
committed
Sema: Tighten up invariants for createDesignatedInitOverride()
1 parent 5ad096f commit fcf7948

File tree

3 files changed

+7
-2
lines changed

3 files changed

+7
-2
lines changed

lib/AST/SubstitutionMap.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -539,6 +539,7 @@ SubstitutionMap::getOverrideSubstitutions(const ClassDecl *baseClass,
539539
auto derivedClassTy = derivedClass->getDeclaredInterfaceType();
540540
baseSubMap = derivedClassTy->getContextSubstitutionMap(
541541
baseClass->getParentModule(), baseClass);
542+
assert(!baseSubMap.hasArchetypes());
542543
}
543544

544545
unsigned origDepth = 0;

lib/AST/Type.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4835,8 +4835,10 @@ TypeBase::getContextSubstitutions(const DeclContext *dc,
48354835

48364836
// Find the superclass type with the context matching that of the member.
48374837
auto *ownerNominal = dc->getSelfNominalTypeDecl();
4838-
if (auto *ownerClass = dyn_cast<ClassDecl>(ownerNominal))
4839-
baseTy = baseTy->getSuperclassForDecl(ownerClass);
4838+
if (auto *ownerClass = dyn_cast<ClassDecl>(ownerNominal)) {
4839+
baseTy = baseTy->getSuperclassForDecl(ownerClass,
4840+
/*usesArchetypes=*/genericEnv != nullptr);
4841+
}
48404842

48414843
// Gather all of the substitutions for all levels of generic arguments.
48424844
auto params = genericSig.getGenericParams();

lib/Sema/CodeSynthesis.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,8 @@ createDesignatedInitOverride(ClassDecl *classDecl,
645645
auto genericSig = ctx.getOverrideGenericSignature(
646646
superclassDecl, classDecl, superclassCtorSig, genericParams);
647647

648+
assert(!subMap.hasArchetypes());
649+
648650
if (superclassCtorSig) {
649651
auto *genericEnv = genericSig.getGenericEnvironment();
650652

0 commit comments

Comments
 (0)