Skip to content

Commit 58e855e

Browse files
committed
[Type checker] Make sure we wire up generic parameters of a context.
The attempt to short-circuit wiring up generic parameters of a context didn’t work when one of the inner types didn’t itself have generic parameters. Make sure we still wire up generic parameters in this case. Fixes a crasher encountered while investigating rdar://problem/43406595.
1 parent f469928 commit 58e855e

File tree

2 files changed

+16
-3
lines changed

2 files changed

+16
-3
lines changed

lib/Sema/TypeChecker.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -304,15 +304,18 @@ static void prepareGenericParamList(GenericParamList *genericParams) {
304304
/// context have been configured.
305305
static void configureOuterGenericParams(const GenericContext *dc) {
306306
auto genericParams = dc->getGenericParams();
307-
if (!genericParams) return;
308307

309-
if (genericParams->getOuterParameters()) return;
308+
// If we already configured the outer parameters, we're done.
309+
if (genericParams && genericParams->getOuterParameters())
310+
return;
310311

311312
DeclContext *outerDC = dc->getParent();
312313
while (!outerDC->isModuleScopeContext()) {
313314
if (auto outerDecl = outerDC->getAsDecl()) {
314315
if (auto outerGenericDC = outerDecl->getAsGenericContext()) {
315-
genericParams->setOuterParameters(outerGenericDC->getGenericParams());
316+
if (genericParams)
317+
genericParams->setOuterParameters(outerGenericDC->getGenericParams());
318+
316319
configureOuterGenericParams(outerGenericDC);
317320
return;
318321
}

test/decl/ext/generic.swift

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,13 @@ struct A<T, U, V> {
192192
extension A.B.C where T == V, X == Z.Assoc2 {
193193
func f() { }
194194
}
195+
196+
// Extensions of nested non-generics within generics.
197+
extension A.B {
198+
struct D { }
199+
}
200+
201+
extension A.B.D {
202+
func g() { }
203+
}
204+

0 commit comments

Comments
 (0)