@@ -537,3 +537,45 @@ func testCaptures(@ClassWrapper ref: Int, @Wrapper value: Int) {
537537 // closure #2 in closure #2 in implicit closure #2 in testCaptures(ref:value:)
538538 // CHECK-LABEL: sil private [ossa] @$s26property_wrapper_parameter12testCaptures3ref5valueySi_AA7WrapperVySiGtFyAA010ProjectionH0VySiGcfu0_yAJcfU1_AJycfU0_ : $@convention(thin) (ProjectionWrapper<Int>) -> ProjectionWrapper<Int>
539539}
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