140140sil hidden [ossa] @copyableKlassInAMoveOnlyStruct2 : $@convention(thin) (@owned NonTrivialStruct, @owned NonTrivialStruct) -> () {
141141bb0(%arg : @owned $NonTrivialStruct, %arg1 : @owned $NonTrivialStruct):
142142 %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
144144 store %arg to [init] %1 : $*NonTrivialStruct
145145 %9 = begin_access [modify] [static] %1 : $*NonTrivialStruct
146146 store %arg1 to [assign] %9 : $*NonTrivialStruct
@@ -154,18 +154,51 @@ bb0(%arg : @owned $NonTrivialStruct, %arg1 : @owned $NonTrivialStruct):
154154 end_access %12 : $*NonTrivialStruct
155155 %19 = begin_access [read] [static] %1 : $*NonTrivialStruct
156156 %20 = struct_element_addr %19 : $*NonTrivialStruct, #NonTrivialStruct.copyableK
157- %21 = load [copy] %20 : $*CopyableKlass // expected-note {{consuming use}}
157+ %21 = load [copy] %20 : $*CopyableKlass
158158 end_access %19 : $*NonTrivialStruct
159159 %23 = function_ref @copyableClassConsume : $@convention(thin) (@owned CopyableKlass) -> ()
160160 %24 = apply %23(%21) : $@convention(thin) (@owned CopyableKlass) -> ()
161161 %25 = begin_access [read] [static] %1 : $*NonTrivialStruct
162162 %26 = struct_element_addr %25 : $*NonTrivialStruct, #NonTrivialStruct.copyableK
163- %27 = load [copy] %26 : $*CopyableKlass // expected-note {{consuming use}}
163+ %27 = load [copy] %26 : $*CopyableKlass
164164 end_access %25 : $*NonTrivialStruct
165165 %29 = function_ref @copyableClassConsume : $@convention(thin) (@owned CopyableKlass) -> ()
166166 %30 = apply %29(%27) : $@convention(thin) (@owned CopyableKlass) -> ()
167167 destroy_addr %1 : $*NonTrivialStruct
168168 dealloc_stack %0 : $*NonTrivialStruct
169169 %33 = tuple ()
170170 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