@@ -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