From d412ea4d16362b3edf500bf6af4aada04636d3fa Mon Sep 17 00:00:00 2001 From: Pavel Yaskevich Date: Thu, 23 Jan 2020 08:30:32 -0800 Subject: [PATCH] [Diagnostics] Unsatisfied requirement `in reference` diagnostics expect type context Resolves: rdar://problem/50666427 --- lib/Sema/CSDiagnostics.cpp | 5 +++-- .../rdar49712364.swift | 15 +++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 validation-test/Sema/type_checker_crashers_fixed/rdar49712364.swift 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 + } + } + } +}