@@ -537,3 +537,45 @@ func testCaptures(@ClassWrapper ref: Int, @Wrapper value: Int) {
537
537
// closure #2 in closure #2 in implicit closure #2 in testCaptures(ref:value:)
538
538
// CHECK-LABEL: sil private [ossa] @$s26property_wrapper_parameter12testCaptures3ref5valueySi_AA7WrapperVySiGtFyAA010ProjectionH0VySiGcfu0_yAJcfU1_AJycfU0_ : $@convention(thin) (ProjectionWrapper<Int>) -> ProjectionWrapper<Int>
539
539
}
540
+
541
+ do {
542
+ @propertyWrapper
543
+ struct Binding < Value> {
544
+ var wrappedValue : Value {
545
+ get { fatalError ( ) }
546
+ nonmutating set { }
547
+ }
548
+
549
+ var projectedValue : Self { self }
550
+
551
+ init ( projectedValue: Self ) { self = projectedValue }
552
+ }
553
+
554
+ final class Value {
555
+ enum Kind {
556
+ }
557
+
558
+ var kind : Binding < Kind > {
559
+ fatalError ( )
560
+ }
561
+ }
562
+
563
+ struct Test {
564
+ var value : Value
565
+
566
+ // CHECK-LABEL: sil private [ossa] @$s26property_wrapper_parameter4TestL_V4test5otheryAA7BindingL_VyAA5ValueL_C4KindOG_tF : $@convention(method) (Binding<Value.Kind>, @guaranteed Test) -> ()
567
+ // CHECK: [[CHECK_PROJECTED_VALUE_INIT_1:%.*]] = function_ref @$s26property_wrapper_parameter4TestL_V9checkKind4kindyAA7BindingL_VyAA5ValueL_C0F0OG_tFAEL_AKvpfW
568
+ // CHECK-NEXT: {{.*}} = apply [[CHECK_PROJECTED_VALUE_INIT_1]]({{.*}}) : $@convention(thin) (Binding<Value.Kind>) -> Binding<Value.Kind>
569
+ // CHECK: [[CHECK_PROJECTED_VALUE_INIT_A:%.*]] = function_ref @$s26property_wrapper_parameter4TestL_V15doubleCheckKind1a1byAA7BindingL_VyAA5ValueL_C0G0OG_AMtFAEL_ALvpfW
570
+ // CHECK-NEXT: {{.*}} = apply [[CHECK_PROJECTED_VALUE_INIT_A]]({{.*}}) : $@convention(thin) (Binding<Value.Kind>) -> Binding<Value.Kind>
571
+ // CHECK: [[CHECK_PROJECTED_VALUE_INIT_B:%.*]] = function_ref @$s26property_wrapper_parameter4TestL_V15doubleCheckKind1a1byAA7BindingL_VyAA5ValueL_C0G0OG_AMtFAFL_ALvpfW
572
+ // CHECK-NEXT: {{.*}} = apply [[CHECK_PROJECTED_VALUE_INIT_B]]({{.*}}) : $@convention(thin) (Binding<Value.Kind>) -> Binding<Value.Kind>
573
+ func test( other: Binding < Value . Kind > ) {
574
+ checkKind ( $kind: value. kind) // Ok
575
+ doubleCheckKind ( $a: value. kind, $b: other) // Ok
576
+ }
577
+
578
+ func checkKind( @Binding kind: Value . Kind ) { }
579
+ func doubleCheckKind( @Binding a: Value . Kind , @Binding b: Value . Kind ) { }
580
+ }
581
+ }
0 commit comments