@@ -2463,16 +2463,19 @@ void ConformanceChecker::recordTypeWitness(AssociatedTypeDecl *assocType,
2463
2463
if (checkWitnessAccess (assocType, typeDecl, &isSetter)) {
2464
2464
assert (!isSetter);
2465
2465
2466
- // Avoid relying on the lifetime of 'this'.
2466
+ // Note: you must not capture 'this' in the below closure .
2467
2467
const DeclContext *DC = this ->DC ;
2468
+ auto requiredAccessScope = getRequiredAccessScope ();
2469
+
2468
2470
diagnoseOrDefer (assocType, false ,
2469
- [this , DC, typeDecl](NormalProtocolConformance *conformance) {
2471
+ [DC, requiredAccessScope, typeDecl](
2472
+ NormalProtocolConformance *conformance) {
2470
2473
AccessLevel requiredAccess =
2471
- getRequiredAccessScope () .requiredAccessForDiagnostics ();
2474
+ requiredAccessScope .requiredAccessForDiagnostics ();
2472
2475
auto proto = conformance->getProtocol ();
2473
2476
auto protoAccessScope = proto->getFormalAccessScope (DC);
2474
2477
bool protoForcesAccess =
2475
- getRequiredAccessScope () .hasEqualDeclContextWith (protoAccessScope);
2478
+ requiredAccessScope .hasEqualDeclContextWith (protoAccessScope);
2476
2479
auto diagKind = protoForcesAccess
2477
2480
? diag::type_witness_not_accessible_proto
2478
2481
: diag::type_witness_not_accessible_type;
@@ -2546,11 +2549,6 @@ void ConformanceChecker::recordTypeWitness(AssociatedTypeDecl *assocType,
2546
2549
aliasDecl->getAttrs ().add (attr);
2547
2550
}
2548
2551
2549
- bool unused;
2550
- assert (TC.Context .hadError () ||
2551
- !checkWitnessAccess (assocType, aliasDecl, &unused));
2552
- (void )unused;
2553
-
2554
2552
if (nominal == DC) {
2555
2553
nominal->addMember (aliasDecl);
2556
2554
} else {
0 commit comments