@@ -199,7 +199,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base : $@convention(thin) (
199199bb0(%x : @guaranteed $ClassLet):
200200 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
201201
202- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLet
202+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLet
203203 %v = load [copy] %p : $*Klass
204204 %b = begin_borrow %v : $Klass
205205 apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
@@ -223,7 +223,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base_and_forwarding_uses :
223223bb0(%x : @guaranteed $ClassLet):
224224 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
225225
226- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLet
226+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLet
227227 %v = load [copy] %p : $*Klass
228228 %c = unchecked_ref_cast %v : $Klass to $Klass
229229 %b = begin_borrow %c : $Klass
@@ -247,30 +247,7 @@ bb0(%x : @guaranteed $SubclassLet):
247247 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
248248
249249 %u = upcast %x : $SubclassLet to $ClassLet
250- %p = ref_element_addr %u : $ClassLet, #ClassLet.aLet
251- %v = load [copy] %p : $*Klass
252- %b = begin_borrow %v : $Klass
253- apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
254- end_borrow %b : $Klass
255- destroy_value %v : $Klass
256-
257- return undef : $()
258- }
259-
260- // CHECK-LABEL: sil [ossa] @dont_copy_let_global :
261- // CHECK: global_addr
262- // CHECK-NEXT: load_borrow
263- // CHECK-NEXT: begin_borrow
264- // CHECK-NEXT: apply
265- // CHECK-NEXT: end_borrow
266- // CHECK-NEXT: end_borrow
267- // CHECK-NEXT: return
268- // CHECK-NEXT: } // end sil function 'dont_copy_let_global'
269- sil [ossa] @dont_copy_let_global : $@convention(thin) () -> () {
270- bb0:
271- %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
272-
273- %p = global_addr @a_let_global : $*Klass
250+ %p = ref_element_addr [immutable] %u : $ClassLet, #ClassLet.aLet
274251 %v = load [copy] %p : $*Klass
275252 %b = begin_borrow %v : $Klass
276253 apply %f(%b) : $@convention(thin) (@guaranteed Klass) -> ()
@@ -293,7 +270,7 @@ sil [ossa] @dont_copy_let_properties_with_guaranteed_base_structural : $@convent
293270bb0(%x : @guaranteed $ClassLet):
294271 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
295272
296- %p = ref_element_addr %x : $ClassLet, #ClassLet.aLetTuple
273+ %p = ref_element_addr [immutable] %x : $ClassLet, #ClassLet.aLetTuple
297274 %q = tuple_element_addr %p : $*(Klass, Klass), 1
298275 %v = load [copy] %q : $*Klass
299276 %b = begin_borrow %v : $Klass
@@ -369,7 +346,7 @@ bb0(%x : @owned $ClassLet):
369346 %f = function_ref @black_hole : $@convention(thin) (@guaranteed Klass) -> ()
370347
371348 %a = begin_borrow %x : $ClassLet
372- %p = ref_element_addr %a : $ClassLet, #ClassLet.aLet
349+ %p = ref_element_addr [immutable] %a : $ClassLet, #ClassLet.aLet
373350 %v = load [copy] %p : $*Klass
374351 apply %f(%v) : $@convention(thin) (@guaranteed Klass) -> ()
375352 destroy_value %v : $Klass
@@ -409,7 +386,7 @@ bb0(%x : @owned $ClassLet):
409386 %f = function_ref @guaranteed_user : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
410387
411388 %a = begin_borrow %x : $ClassLet
412- %p = ref_element_addr %a : $ClassLet, #ClassLet.aLet
389+ %p = ref_element_addr [immutable] %a : $ClassLet, #ClassLet.aLet
413390 %v = load [copy] %p : $*Klass
414391 %v_cast = unchecked_ref_cast %v : $Klass to $Builtin.NativeObject
415392 apply %f(%v_cast) : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
@@ -1145,7 +1122,7 @@ bb0(%0 : @guaranteed $FakeOptional<ClassLet>):
11451122 switch_enum %0 : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
11461123
11471124bb1(%1 : @guaranteed $ClassLet):
1148- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1125+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
11491126 %3 = load [copy] %2 : $*Klass
11501127 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
11511128 destroy_value %3 : $Klass
@@ -1171,7 +1148,7 @@ bb0(%0 : @owned $FakeOptional<ClassLet>):
11711148 switch_enum %0a : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
11721149
11731150bb1(%1 : @guaranteed $ClassLet):
1174- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1151+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
11751152 %3 = load [copy] %2 : $*Klass
11761153 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
11771154 destroy_value %3 : $Klass
@@ -1201,7 +1178,7 @@ bb0(%0 : $*FakeOptional<ClassLet>):
12011178 switch_enum %0a : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
12021179
12031180bb1(%1 : @guaranteed $ClassLet):
1204- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1181+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
12051182 %3 = load [copy] %2 : $*Klass
12061183 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12071184 destroy_value %3 : $Klass
@@ -1240,7 +1217,7 @@ bb0c(%0c : @guaranteed $FakeOptional<ClassLet>):
12401217 switch_enum %0d : $FakeOptional<ClassLet>, case #FakeOptional.some!enumelt: bb1, case #FakeOptional.none!enumelt: bb2
12411218
12421219bb1(%1 : @guaranteed $ClassLet):
1243- %2 = ref_element_addr %1 : $ClassLet, #ClassLet.aLet
1220+ %2 = ref_element_addr [immutable] %1 : $ClassLet, #ClassLet.aLet
12441221 %3 = load [copy] %2 : $*Klass
12451222 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12461223 destroy_value %3 : $Klass
@@ -1276,7 +1253,7 @@ bb1:
12761253bb2:
12771254 %0b = begin_borrow %0 : $FakeOptional<ClassLet>
12781255 %0b2 = unchecked_enum_data %0b : $FakeOptional<ClassLet>, #FakeOptional.some!enumelt
1279- %2 = ref_element_addr %0b2 : $ClassLet, #ClassLet.aLet
1256+ %2 = ref_element_addr [immutable] %0b2 : $ClassLet, #ClassLet.aLet
12801257 %3 = load [copy] %2 : $*Klass
12811258 apply %f(%3) : $@convention(thin) (@guaranteed Klass) -> ()
12821259 destroy_value %3 : $Klass
@@ -1520,12 +1497,9 @@ bbEnd:
15201497 return %9999 : $()
15211498}
15221499
1523- // Just make sure that we do not crash on this code and convert the 2nd load
1524- // [copy] to a load_borrow.
1500+ // Just make sure that we do not crash on this code
15251501//
15261502// CHECK-LABEL: sil [ossa] @improper_dead_end_block_crasher_test : $@convention(thin) (Builtin.RawPointer) -> () {
1527- // CHECK: load_borrow
1528- // CHECK: load_borrow
15291503// CHECK: } // end sil function 'improper_dead_end_block_crasher_test'
15301504sil [ossa] @improper_dead_end_block_crasher_test : $@convention(thin) (Builtin.RawPointer) -> () {
15311505bb0(%0 : $Builtin.RawPointer):
0 commit comments