@@ -2746,7 +2746,8 @@ PropertyWrapperAuxiliaryVariablesRequest::evaluate(Evaluator &evaluator,
27462746 VarDecl *wrappedValueVar = nullptr ;
27472747
27482748 // Create the backing storage property.
2749- if (auto *param = dyn_cast<ParamDecl>(var)) {
2749+ if (var->hasExternalPropertyWrapper ()) {
2750+ auto *param = cast<ParamDecl>(var);
27502751 backingVar = ParamDecl::cloneWithoutType (ctx, param);
27512752 backingVar->setName (name);
27522753 } else {
@@ -2855,6 +2856,24 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
28552856 var->diagnose (diag::opaque_type_var_no_underlying_type);
28562857 }
28572858 }
2859+ } else if (!var->hasExternalPropertyWrapper ()) {
2860+ auto *param = cast<ParamDecl>(var);
2861+ auto *backingVar = var->getPropertyWrapperBackingProperty ();
2862+ auto *pbd = createPBD (backingVar);
2863+
2864+ auto *paramRef = new (ctx) DeclRefExpr (var, DeclNameLoc (), /* implicit=*/ true );
2865+ initializer = buildPropertyWrapperInitCall (
2866+ var, storageType, paramRef, PropertyWrapperInitKind::WrappedValue);
2867+ TypeChecker::typeCheckExpression (initializer, dc);
2868+
2869+ // Check initializer effects.
2870+ auto *initContext = new (ctx) PropertyWrapperInitializer (
2871+ dc, param, PropertyWrapperInitializer::Kind::ProjectedValue);
2872+
2873+ TypeChecker::checkInitializerEffects (initContext, initializer);
2874+
2875+ pbd->setInit (0 , initializer);
2876+ pbd->setInitializerChecked (0 );
28582877 }
28592878
28602879 // If there is a projection property (projectedValue) in the wrapper,
@@ -2863,8 +2882,7 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
28632882 if (auto *projection = var->getPropertyWrapperProjectionVar ()) {
28642883 createPBD (projection);
28652884
2866- auto wrapperInfo = var->getAttachedPropertyWrapperTypeInfo (0 );
2867- if (wrapperInfo.hasProjectedValueInit && isa<ParamDecl>(var)) {
2885+ if (var->hasExternalPropertyWrapper ()) {
28682886 // Projected-value initialization is currently only supported for parameters.
28692887 auto *param = dyn_cast<ParamDecl>(var);
28702888 auto *placeholder = PropertyWrapperValuePlaceholderExpr::create (
0 commit comments