Skip to content

Commit e35d2d3

Browse files
authored
Merge pull request #33238 from hborla/invalid-wrapped-value-placeholder-injection
[Property Wrappers] Don't inject the wrapped value placeholder in CSApply if the apply expression is a nullptr
2 parents 8983fac + d376f29 commit e35d2d3

File tree

2 files changed

+20
-3
lines changed

2 files changed

+20
-3
lines changed

lib/Sema/ConstraintSystem.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,7 @@ class SolutionApplicationTarget {
16661666
return false;
16671667

16681668
auto *wrappedVar = expression.propertyWrapper.wrappedVar;
1669-
if (!wrappedVar || wrappedVar->isStatic())
1669+
if (!apply || !wrappedVar || wrappedVar->isStatic())
16701670
return false;
16711671

16721672
return expression.propertyWrapper.innermostWrappedValueInit == apply;

test/Sema/property_wrappers.swift

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ struct Transaction {
55
}
66

77
@propertyWrapper
8-
struct Wrapper<Value> {
8+
struct WrapperWithClosureArg<Value> {
99
var wrappedValue: Value
1010

1111
init(wrappedValue: Value,
@@ -21,9 +21,26 @@ struct R_59685601 {
2121
// CHECK-NEXT: property_wrapper_value_placeholder_expr implicit type='String'
2222
// CHECK-NEXT: opaque_value_expr implicit type='String'
2323
// CHECK-NEXT: string_literal_expr type='String'
24-
@Wrapper(reset: { value, transaction in
24+
@WrapperWithClosureArg(reset: { value, transaction in
2525
transaction.state = 10
2626
})
2727
private var value = "hello"
2828
}
2929

30+
@propertyWrapper
31+
struct Wrapper<Value> {
32+
var wrappedValue: Value
33+
}
34+
35+
// CHECK-LABEL: struct_decl{{.*}}TestInitSubscript
36+
struct TestInitSubscript {
37+
enum Color: CaseIterable { case pink }
38+
39+
// CHECK: tuple_expr type='(wrappedValue: TestInitSubscript.Color)'
40+
// CHECK: subscript_expr type='TestInitSubscript.Color'
41+
// CHECK: paren_expr type='(Int)'
42+
// CHECK-NOT: property_wrapper_value_placeholder_expr implicit type='Int'
43+
// CHECK: integer_literal_expr type='Int'
44+
@Wrapper(wrappedValue: Color.allCases[0])
45+
var color: Color
46+
}

0 commit comments

Comments
 (0)