Skip to content

Commit 1c8ad00

Browse files
committed
[Property Wrappers] Fix ParamDecl::getDefaultValueStringRepresentation
to return a string representing default initialization when a property is default initialized via property wrapper.
1 parent e85b658 commit 1c8ad00

File tree

2 files changed

+26
-6
lines changed

2 files changed

+26
-6
lines changed

lib/AST/Decl.cpp

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6494,9 +6494,13 @@ ParamDecl::getDefaultValueStringRepresentation(
64946494
return getASTContext().SourceMgr.extractText(charRange);
64956495
}
64966496

6497-
// If there is no parent initializer, we used the default initializer.
6498-
auto parentInit = original->getParentInitializer();
6499-
if (!parentInit) {
6497+
// If there is no initial wrapped value, we used the default initializer.
6498+
Expr *wrappedValue = nullptr;
6499+
if (auto *parentInit = original->getParentInitializer())
6500+
if (auto *placeholder = findWrappedValuePlaceholder(parentInit))
6501+
wrappedValue = placeholder->getOriginalWrappedValue();
6502+
6503+
if (!wrappedValue) {
65006504
if (auto type = original->getPropertyWrapperBackingPropertyType()) {
65016505
if (auto nominal = type->getAnyNominal()) {
65026506
scratch.clear();
@@ -6511,9 +6515,8 @@ ParamDecl::getDefaultValueStringRepresentation(
65116515
return ".init()";
65126516
}
65136517

6514-
auto init =
6515-
findWrappedValuePlaceholder(parentInit)->getOriginalWrappedValue();
6516-
return extractInlinableText(getASTContext().SourceMgr, init, scratch);
6518+
auto &sourceMgr = getASTContext().SourceMgr;
6519+
return extractInlinableText(sourceMgr, wrappedValue, scratch);
65176520
}
65186521
}
65196522

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// RUN: %target-swift-frontend -print-ast %s | %FileCheck %s
2+
3+
@propertyWrapper
4+
struct Wrapper {
5+
init() {}
6+
7+
var wrappedValue: Int = 0
8+
}
9+
10+
// CHECK-LABEL: internal struct UseWrapperDefaultInit
11+
struct UseWrapperDefaultInit {
12+
@Wrapper var value
13+
// CHECK: internal init(value: Wrapper = Wrapper())
14+
}
15+
16+
let _ = UseWrapperDefaultInit()
17+

0 commit comments

Comments
 (0)