Skip to content

Commit aa8ad8e

Browse files
committed
[Property Wrappers] Avoid creating an unnecessary property wrapper generator
function for default-initialized local and static wrapped properties.
1 parent 1068494 commit aa8ad8e

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2876,10 +2876,16 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
28762876
if (!parentPBD->isInitialized(patternNumber) && wrapperInfo.defaultInit) {
28772877
// FIXME: Record this expression somewhere so that DI can perform the
28782878
// initialization itself.
2879-
Expr *initializer = nullptr;
2880-
typeCheckSynthesizedWrapperInitializer(var, initializer);
2881-
pbd->setInit(0, initializer);
2879+
Expr *defaultInit = nullptr;
2880+
typeCheckSynthesizedWrapperInitializer(var, defaultInit);
2881+
pbd->setInit(0, defaultInit);
28822882
pbd->setInitializerChecked(0);
2883+
2884+
// If a static, global, or local wrapped property has a default
2885+
// initializer, this is the only initializer that will be used.
2886+
if (var->isStatic() || !dc->isTypeContext()) {
2887+
initializer = defaultInit;
2888+
}
28832889
} else if (var->hasObservers() && !dc->isTypeContext()) {
28842890
var->diagnose(diag::observingprop_requires_initializer);
28852891
}

test/SILGen/property_wrapper_local.swift

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,12 @@ struct DefaultInit {
206206
}
207207
}
208208

209+
@propertyWrapper
210+
struct DefaultWrappedValue {
211+
// CHECK-LABEL: sil hidden [ossa] @$s22property_wrapper_local19DefaultWrappedValueVACycfC : $@convention(method) (@thin DefaultWrappedValue.Type) -> DefaultWrappedValue
212+
var wrappedValue: Int = 10
213+
}
214+
209215
// CHECK-LABEL: sil hidden [ossa] @$s22property_wrapper_local20testLocalDefaultInityyF : $@convention(thin) () -> ()
210216
func testLocalDefaultInit() {
211217
// CHECK: function_ref @$s22property_wrapper_local11DefaultInitVACycfC : $@convention(method) (@thin DefaultInit.Type) -> DefaultInit
@@ -216,4 +222,7 @@ func testLocalDefaultInit() {
216222

217223
// CHECK: function_ref @$s22property_wrapper_local11DefaultInitVACycfC : $@convention(method) (@thin DefaultInit.Type) -> DefaultInit
218224
@DefaultInit() var y: Int
225+
226+
// CHECK: function_ref @$s22property_wrapper_local19DefaultWrappedValueVACycfC : $@convention(method) (@thin DefaultWrappedValue.Type) -> DefaultWrappedValue
227+
@DefaultWrappedValue var w: Int
219228
}

0 commit comments

Comments
 (0)