Skip to content

Commit 41fc033

Browse files
committed
[Property wrappers] Fix another opaque-result-types crasher.
Test case from Holly Borla, thank you! (cherry picked from commit 3e7b4ae)
1 parent 0911d2d commit 41fc033

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

lib/Sema/TypeCheckStorage.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2684,16 +2684,17 @@ PropertyWrapperBackingPropertyInfoRequest::evaluate(Evaluator &evaluator,
26842684
pbd->setInit(0, initializer);
26852685
pbd->setInitializerChecked(0);
26862686
wrappedValue = findWrappedValuePlaceholder(initializer);
2687-
} else if (!parentPBD->isInitialized(patternNumber) &&
2688-
wrapperInfo.defaultInit) {
2689-
// FIXME: Record this expression somewhere so that DI can perform the
2690-
// initialization itself.
2691-
auto typeExpr = TypeExpr::createImplicit(storageType, ctx);
2692-
Expr *initializer = CallExpr::createImplicit(ctx, typeExpr, {}, { });
2693-
typeCheckSynthesizedWrapperInitializer(pbd, backingVar, parentPBD,
2694-
initializer);
2695-
pbd->setInit(0, initializer);
2696-
pbd->setInitializerChecked(0);
2687+
} else {
2688+
if (!parentPBD->isInitialized(patternNumber) && wrapperInfo.defaultInit) {
2689+
// FIXME: Record this expression somewhere so that DI can perform the
2690+
// initialization itself.
2691+
auto typeExpr = TypeExpr::createImplicit(storageType, ctx);
2692+
Expr *initializer = CallExpr::createImplicit(ctx, typeExpr, {}, { });
2693+
typeCheckSynthesizedWrapperInitializer(pbd, backingVar, parentPBD,
2694+
initializer);
2695+
pbd->setInit(0, initializer);
2696+
pbd->setInitializerChecked(0);
2697+
}
26972698

26982699
if (var->getOpaqueResultTypeDecl()) {
26992700
var->diagnose(diag::opaque_type_var_no_underlying_type);

test/decl/var/property_wrappers_opaque.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,6 @@ struct FB7699647 {
2222
@WrapperWithDefaultInit() var otherProperty: some P // expected-error{{property declares an opaque return type, but cannot infer the underlying type from its initializer expression}}
2323
}
2424

25+
struct FB7699647b {
26+
@WrapperWithDefaultInit var property: some P // expected-error{{property declares an opaque return type, but cannot infer the underlying type from its initializer expression}}
27+
}

0 commit comments

Comments
 (0)