diff --git a/lib/Sema/CSDiagnostics.cpp b/lib/Sema/CSDiagnostics.cpp index f1b0e5d3eef03..586f71975483f 100644 --- a/lib/Sema/CSDiagnostics.cpp +++ b/lib/Sema/CSDiagnostics.cpp @@ -336,8 +336,9 @@ bool RequirementFailure::diagnoseAsError() { return true; } - if (genericCtx != reqDC && (genericCtx->isChildContextOf(reqDC) || - isStaticOrInstanceMember(AffectedDecl))) { + if (reqDC->isTypeContext() && genericCtx != reqDC && + (genericCtx->isChildContextOf(reqDC) || + isStaticOrInstanceMember(AffectedDecl))) { auto *NTD = reqDC->getSelfNominalTypeDecl(); emitDiagnostic(anchor->getLoc(), getDiagnosticInRereference(), AffectedDecl->getDescriptiveKind(), diff --git a/validation-test/Sema/type_checker_crashers_fixed/rdar49712364.swift b/validation-test/Sema/type_checker_crashers_fixed/rdar49712364.swift new file mode 100644 index 0000000000000..c4ee382b8dc5e --- /dev/null +++ b/validation-test/Sema/type_checker_crashers_fixed/rdar49712364.swift @@ -0,0 +1,15 @@ +// RUN: not %target-swift-frontend %s -typecheck + +protocol A {} + +class C where T: A {} + +extension C { + func foo() { + extension C where T: Undefined { + class Inner: Encodable { + var foo: Int + } + } + } +}