@@ -65,3 +65,39 @@ struct MemberTests {
65
65
// CHECK-NEXT: {{.*}} = apply [[IGNORE_INIT]]<(inout MemberTests) -> Int>({{.*}})
66
66
@Ignore mutating func mutatingFn( ) -> Int { 42 }
67
67
}
68
+
69
+ @runtimeMetadata
70
+ struct Flag < U> {
71
+ init < T> ( attachedTo: T , value: U ) { }
72
+ }
73
+
74
+ struct TestSelfUse {
75
+ static var answer : Int = 42
76
+ static var question : String = " "
77
+
78
+ // CHECK-LABEL: sil hidden [runtime_accessible] [ossa] @$s18runtime_attributes11TestSelfUseV1xSSvpfaAA4Flag : $@convention(thin) () -> @out Optional<Flag<Int>>
79
+ // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s18runtime_attributes11TestSelfUseV6answerSivau
80
+ // CHECK-NEXT: [[ADDR_RESULT:%.*]] = apply [[ADDRESSOR]]() : $@convention(thin) () -> Builtin.RawPointer
81
+ // CHECK-NEXT: [[PROP_ADDR:%.*]] = pointer_to_address [[ADDR_RESULT]] : $Builtin.RawPointer to [strict] $*Int
82
+ // CHECK-NEXT: [[PROP_ACCESS:%.*]] = begin_access [read] [dynamic] [[PROP_ADDR]] : $*Int
83
+ // CHECK-NEXT: [[PROP_VALUE:%.*]] = load [trivial] [[PROP_ACCESS]] : $*Int
84
+ // CHECK_NEXT: end_access [[PROP_ACCESS]] : $*Int
85
+ // CHECK: [[PROP_VAL_COPY:%.*]] = alloc_stack $Int
86
+ // CHECK: store [[PROP_VALUE]] to [trivial] [[PROP_VAL_COPY]] : $*Int
87
+ // CHECK: [[FLAG_INIT_REF:%.*]] = function_ref @$s18runtime_attributes4FlagV10attachedTo5valueACyxGqd___xtclufC
88
+ // CHECK-NEXT: {{.*}} = apply [[FLAG_INIT_REF]]<Int, WritableKeyPath<TestSelfUse, String>>({{.*}}, [[PROP_VAL_COPY]], {{.*}})
89
+ @Flag ( value: Self . answer) var x : String = " "
90
+
91
+ // CHECK-LABEL: sil hidden [runtime_accessible] [ossa] @$s18runtime_attributes11TestSelfUseV4testyycvpfaAA4Flag : $@convention(thin) () -> @out Optional<Flag<String>>
92
+ // CHECK: [[ADDRESSOR:%.*]] = function_ref @$s18runtime_attributes11TestSelfUseV8questionSSvau
93
+ // CHECK-NEXT: [[ADDR_RESULT:%.*]] = apply [[ADDRESSOR]]() : $@convention(thin) () -> Builtin.RawPointer
94
+ // CHECK-NEXT: [[PROP_ADDR:%.*]] = pointer_to_address [[ADDR_RESULT]] : $Builtin.RawPointer to [strict] $*String
95
+ // CHECK-NEXT: [[PROP_ACCESS:%.*]] = begin_access [read] [dynamic] [[PROP_ADDR]] : $*String
96
+ // CHECK-NEXT: [[PROP_VALUE:%.*]] = load [copy] [[PROP_ACCESS]] : $*String
97
+ // CHECK_NEXT: end_access [[PROP_ACCESS]] : $*String
98
+ // CHECK: [[PROP_VAL_COPY:%.*]] = alloc_stack $String
99
+ // CHECK: store [[PROP_VALUE]] to [init] [[PROP_VAL_COPY]] : $*String
100
+ // CHECK: [[FLAG_INIT_REF:%.*]] = function_ref @$s18runtime_attributes4FlagV10attachedTo5valueACyxGqd___xtclufC
101
+ // CHECK-NEXT: {{.*}} = apply [[FLAG_INIT_REF]]<String, (TestSelfUse) -> ()>({{.*}}, [[PROP_VAL_COPY]], {{.*}})
102
+ @Flag ( value: Self . question) func test( ) { }
103
+ }
0 commit comments