140
140
sil hidden [ossa] @copyableKlassInAMoveOnlyStruct2 : $@convention(thin) (@owned NonTrivialStruct, @owned NonTrivialStruct) -> () {
141
141
bb0(%arg : @owned $NonTrivialStruct, %arg1 : @owned $NonTrivialStruct):
142
142
%0 = alloc_stack [lexical] $NonTrivialStruct, var, name "a"
143
- %1 = mark_must_check [no_implicit_copy] %0 : $*NonTrivialStruct // expected-error {{'a' consumed more than once}}
143
+ %1 = mark_must_check [no_implicit_copy] %0 : $*NonTrivialStruct
144
144
store %arg to [init] %1 : $*NonTrivialStruct
145
145
%9 = begin_access [modify] [static] %1 : $*NonTrivialStruct
146
146
store %arg1 to [assign] %9 : $*NonTrivialStruct
@@ -154,18 +154,51 @@ bb0(%arg : @owned $NonTrivialStruct, %arg1 : @owned $NonTrivialStruct):
154
154
end_access %12 : $*NonTrivialStruct
155
155
%19 = begin_access [read] [static] %1 : $*NonTrivialStruct
156
156
%20 = struct_element_addr %19 : $*NonTrivialStruct, #NonTrivialStruct.copyableK
157
- %21 = load [copy] %20 : $*CopyableKlass // expected-note {{consuming use}}
157
+ %21 = load [copy] %20 : $*CopyableKlass
158
158
end_access %19 : $*NonTrivialStruct
159
159
%23 = function_ref @copyableClassConsume : $@convention(thin) (@owned CopyableKlass) -> ()
160
160
%24 = apply %23(%21) : $@convention(thin) (@owned CopyableKlass) -> ()
161
161
%25 = begin_access [read] [static] %1 : $*NonTrivialStruct
162
162
%26 = struct_element_addr %25 : $*NonTrivialStruct, #NonTrivialStruct.copyableK
163
- %27 = load [copy] %26 : $*CopyableKlass // expected-note {{consuming use}}
163
+ %27 = load [copy] %26 : $*CopyableKlass
164
164
end_access %25 : $*NonTrivialStruct
165
165
%29 = function_ref @copyableClassConsume : $@convention(thin) (@owned CopyableKlass) -> ()
166
166
%30 = apply %29(%27) : $@convention(thin) (@owned CopyableKlass) -> ()
167
167
destroy_addr %1 : $*NonTrivialStruct
168
168
dealloc_stack %0 : $*NonTrivialStruct
169
169
%33 = tuple ()
170
170
return %33 : $()
171
- }
171
+ }
172
+
173
+ sil [ossa] @moveOnlyKlassInAMoveOnlyStruct2 : $@convention(thin) (@owned NonTrivialStruct, @owned NonTrivialStruct) -> () {
174
+ bb0(%arg : @owned $NonTrivialStruct, %arg1 : @owned $NonTrivialStruct):
175
+ %0 = alloc_stack [lexical] $NonTrivialStruct, var, name "a"
176
+ %1 = mark_must_check [no_implicit_copy] %0 : $*NonTrivialStruct // expected-error {{'a' consumed more than once}}
177
+ store %arg to [init] %1 : $*NonTrivialStruct
178
+ %9 = begin_access [modify] [static] %1 : $*NonTrivialStruct
179
+ store %arg1 to [assign] %9 : $*NonTrivialStruct
180
+ end_access %9 : $*NonTrivialStruct
181
+ %12 = begin_access [read] [static] %1 : $*NonTrivialStruct
182
+ %13 = struct_element_addr %12 : $*NonTrivialStruct, #NonTrivialStruct.k
183
+ %14 = load_borrow %13 : $*Klass
184
+ %15 = function_ref @nonConsumingUseKlass : $@convention(thin) (@guaranteed Klass) -> ()
185
+ %16 = apply %15(%14) : $@convention(thin) (@guaranteed Klass) -> ()
186
+ end_borrow %14 : $Klass
187
+ end_access %12 : $*NonTrivialStruct
188
+ %19 = begin_access [read] [static] %1 : $*NonTrivialStruct
189
+ %20 = struct_element_addr %19 : $*NonTrivialStruct, #NonTrivialStruct.k
190
+ %21 = load [copy] %20 : $*Klass // expected-note {{consuming use}}
191
+ end_access %19 : $*NonTrivialStruct
192
+ %23 = function_ref @classConsume : $@convention(thin) (@owned Klass) -> ()
193
+ %24 = apply %23(%21) : $@convention(thin) (@owned Klass) -> ()
194
+ %25 = begin_access [read] [static] %1 : $*NonTrivialStruct
195
+ %26 = struct_element_addr %25 : $*NonTrivialStruct, #NonTrivialStruct.k
196
+ %27 = load [copy] %26 : $*Klass // expected-note {{consuming use}}
197
+ end_access %25 : $*NonTrivialStruct
198
+ %29 = function_ref @classConsume : $@convention(thin) (@owned Klass) -> ()
199
+ %30 = apply %29(%27) : $@convention(thin) (@owned Klass) -> ()
200
+ destroy_addr %1 : $*NonTrivialStruct
201
+ dealloc_stack %0 : $*NonTrivialStruct
202
+ %33 = tuple ()
203
+ return %33 : $()
204
+ }
0 commit comments