Skip to content

Commit 81912e9

Browse files
committed
AST: Handle request cycle in TypeBase::getMemberSubstitutions()
I don't have a test case, but it's possible that getGenericSignature() returns nullptr, even if the declaration has a generic parameter list, because of a request cycle. Fixes <rdar://problem/60045501>.
1 parent d0fb9c6 commit 81912e9

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

lib/AST/Type.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4018,14 +4018,15 @@ TypeSubstitutionMap TypeBase::getMemberSubstitutions(
40184018
isa<SubscriptDecl>(member)) {
40194019
auto *innerDC = member->getInnermostDeclContext();
40204020
if (innerDC->isInnermostContextGeneric()) {
4021-
auto sig = innerDC->getGenericSignatureOfContext();
4022-
for (auto param : sig->getInnermostGenericParams()) {
4023-
auto *genericParam = param->getCanonicalType()
4024-
->castTo<GenericTypeParamType>();
4025-
substitutions[genericParam] =
4026-
(genericEnv
4027-
? genericEnv->mapTypeIntoContext(param)
4028-
: param);
4021+
if (auto sig = innerDC->getGenericSignatureOfContext()) {
4022+
for (auto param : sig->getInnermostGenericParams()) {
4023+
auto *genericParam = param->getCanonicalType()
4024+
->castTo<GenericTypeParamType>();
4025+
substitutions[genericParam] =
4026+
(genericEnv
4027+
? genericEnv->mapTypeIntoContext(param)
4028+
: param);
4029+
}
40294030
}
40304031
}
40314032
}

0 commit comments

Comments
 (0)