@@ -201,7 +201,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base : $@convention(thin) (
201201bb0(%x : @guaranteed $ClassLet):
202202 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
203203
204- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLet
204+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLet
205205 %v = load [copy] %p : $*Klass
206206 %b = begin_borrow %v : $Klass
207207 apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
@@ -225,7 +225,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base_and_forwarding_uses :
225225bb0(%x : @guaranteed $ClassLet):
226226 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
227227
228- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLet
228+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLet
229229 %v = load [copy] %p : $*Klass
230230 %c = unchecked_ref_cast %v : $Klass to $Klass
231231 %b = begin_borrow %c : $Klass
@@ -249,30 +249,7 @@ bb0(%x : @guaranteed $SubclassLet):
249249 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
250250
251251 %u = upcast %x : $SubclassLet to $ClassLet
252- %p = ref_element_addr %u : $ClassLet, #ClassLet.aLet
253- %v = load [copy] %p : $*Klass
254- %b = begin_borrow %v : $Klass
255- apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
256- end_borrow %b : $Klass
257- destroy_value %v : $Klass
258-
259- return undef : $()
260- }
261-
262- // CHECK-LABEL: sil [ossa] @dont_copy_let_global :
263- // CHECK: global_addr
264- // CHECK-NEXT: load_borrow
265- // CHECK-NEXT: begin_borrow
266- // CHECK-NEXT: apply
267- // CHECK-NEXT: end_borrow
268- // CHECK-NEXT: end_borrow
269- // CHECK-NEXT: return
270- // CHECK-NEXT: } // end sil function 'dont_copy_let_global'
271- sil [ossa] @dont_copy_let_global : $@convention(thin) () -> () {
272- bb0:
273- %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
274-
275- %p = global_addr @a_let_global : $*Klass
252+ %p = ref_element_addr [immutable] %u : $ClassLet, #ClassLet.aLet
276253 %v = load [copy] %p : $*Klass
277254 %b = begin_borrow %v : $Klass
278255 apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
@@ -295,7 +272,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base_structural : $@convent
295272bb0(%x : @guaranteed $ClassLet):
296273 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
297274
298- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLetTuple
275+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLetTuple
299276 %q = tuple_element_addr %p : $*(Klass, Klass), 1
300277 %v = load [copy] %q : $*Klass
301278 %b = begin_borrow %v : $Klass
@@ -371,7 +348,7 @@ bb0(%x : @owned $ClassLet):
371348 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
372349
373350 %a = begin_borrow %x : $ClassLet
374- %p = ref_element_addr %a : $ClassLet, #ClassLet.aLet
351+ %p = ref_element_addr [immutable] %a : $ClassLet, #ClassLet.aLet
375352 %v = load [copy] %p : $*Klass
376353 apply %f(%v) : $@convention(thin) (@guaranteed Klass) -> ()
377354 destroy_value %v : $Klass
@@ -411,7 +388,7 @@ bb0(%x : @owned $ClassLet):
411388 %f = function_ref @guaranteed_user : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
412389
413390 %a = begin_borrow %x : $ClassLet
414- %p = ref_element_addr %a : $ClassLet, #ClassLet.aLet
391+ %p = ref_element_addr [immutable] %a : $ClassLet, #ClassLet.aLet
415392 %v = load [copy] %p : $*Klass
416393 %v_cast = unchecked_ref_cast %v : $Klass to $Builtin.NativeObject
417394 apply %f(%v_cast) : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
@@ -1147,7 +1124,7 @@ bb0(%0 : @guaranteed $FakeOptional<ClassLet>):
11471124 switch_enum %0 : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
11481125
11491126bb1(%1 : @guaranteed $ClassLet):
1150- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1127+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
11511128 %3 = load [copy] %2 : $*Klass
11521129 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
11531130 destroy_value %3 : $Klass
@@ -1173,7 +1150,7 @@ bb0(%0 : @owned $FakeOptional<ClassLet>):
11731150 switch_enum %0a : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
11741151
11751152bb1(%1 : @guaranteed $ClassLet):
1176- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1153+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
11771154 %3 = load [copy] %2 : $*Klass
11781155 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
11791156 destroy_value %3 : $Klass
@@ -1203,7 +1180,7 @@ bb0(%0 : $*FakeOptional<ClassLet>):
12031180 switch_enum %0a : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
12041181
12051182bb1(%1 : @guaranteed $ClassLet):
1206- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1183+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
12071184 %3 = load [copy] %2 : $*Klass
12081185 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12091186 destroy_value %3 : $Klass
@@ -1242,7 +1219,7 @@ bb0c(%0c : @guaranteed $FakeOptional<ClassLet>):
12421219 switch_enum %0d : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
12431220
12441221bb1(%1 : @guaranteed $ClassLet):
1245- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1222+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
12461223 %3 = load [copy] %2 : $*Klass
12471224 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12481225 destroy_value %3 : $Klass
@@ -1278,7 +1255,7 @@ bb1:
12781255bb2:
12791256 %0b = begin_borrow %0 : $FakeOptional<ClassLet>
12801257 %0b2 = unchecked_enum_data %0b : $FakeOptional<ClassLet>, #FakeOptional.some!enumelt
1281- %2 = ref_element_addr %0b2 : $ClassLet, #ClassLet.aLet
1258+ %2 = ref_element_addr [immutable] %0b2 : $ClassLet, #ClassLet.aLet
12821259 %3 = load [copy] %2 : $*Klass
12831260 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12841261 destroy_value %3 : $Klass
@@ -1522,12 +1499,9 @@ bbEnd:
15221499 return %9999 : $()
15231500}
15241501
1525- // Just make sure that we do not crash on this code and convert the 2nd load
1526- // [copy] to a load_borrow.
1502+ // Just make sure that we do not crash on this code
15271503//
15281504// CHECK-LABEL: sil [ossa] @improper_dead_end_block_crasher_test : $@convention(thin) (Builtin.RawPointer) -> () {
1529- // CHECK: load_borrow
1530- // CHECK: load_borrow
15311505// CHECK: } // end sil function 'improper_dead_end_block_crasher_test'
15321506sil [ossa] @improper_dead_end_block_crasher_test : $@convention(thin) (Builtin.RawPointer) -> () {
15331507bb0(%0 : $Builtin.RawPointer):
0 commit comments