@@ -2689,7 +2689,8 @@ static VarDecl *synthesizePropertyWrapperProjectionVar(
2689
2689
}
2690
2690
2691
2691
static void typeCheckSynthesizedWrapperInitializer (VarDecl *wrappedVar,
2692
- Expr *&initializer) {
2692
+ Expr *&initializer,
2693
+ bool contextualize = false ) {
2693
2694
auto *dc = wrappedVar->getInnermostDeclContext ();
2694
2695
auto &ctx = wrappedVar->getASTContext ();
2695
2696
auto *initContext = new (ctx) PropertyWrapperInitializer (
@@ -2705,6 +2706,11 @@ static void typeCheckSynthesizedWrapperInitializer(VarDecl *wrappedVar,
2705
2706
2706
2707
initializer = result->getAsExpr ();
2707
2708
2709
+ // Contextualize the initializer which is a local variable with defaultInit or
2710
+ // gets an independent initializer. The rest of initializer contextualizing
2711
+ // will be done in visitPatternBindingDecl.
2712
+ if (!contextualize)
2713
+ return ;
2708
2714
TypeChecker::contextualizeInitializer (initContext, initializer);
2709
2715
checkPropertyWrapperActorIsolation (wrappedVar, initializer);
2710
2716
TypeChecker::checkInitializerEffects (initContext, initializer);
@@ -2997,7 +3003,7 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
2997
3003
// FIXME: Record this expression somewhere so that DI can perform the
2998
3004
// initialization itself.
2999
3005
Expr *defaultInit = nullptr ;
3000
- typeCheckSynthesizedWrapperInitializer (var, defaultInit);
3006
+ typeCheckSynthesizedWrapperInitializer (var, defaultInit, dc-> isLocalContext () );
3001
3007
pbd->setInit (0 , defaultInit);
3002
3008
pbd->setInitializerChecked (0 );
3003
3009
@@ -3067,7 +3073,7 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
3067
3073
!var->getName ().hasDollarPrefix ()) {
3068
3074
wrappedValueInit = PropertyWrapperValuePlaceholderExpr::create (
3069
3075
ctx, var->getSourceRange (), var->getType (), /* wrappedValue=*/ nullptr );
3070
- typeCheckSynthesizedWrapperInitializer (var, wrappedValueInit);
3076
+ typeCheckSynthesizedWrapperInitializer (var, wrappedValueInit, true );
3071
3077
}
3072
3078
3073
3079
return PropertyWrapperInitializerInfo (wrappedValueInit, projectedValueInit);
0 commit comments