mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
And use project_box to get to the address value. SILGen now generates a project_box for each alloc_box. And IRGen re-uses the address value from the alloc_box if the operand of project_box is an alloc_box. This lets the generated code be the same as before. Other than that most changes of this (quite large) commit are straightforward.
41 lines
1.2 KiB
Plaintext
41 lines
1.2 KiB
Plaintext
// RUN: %target-sil-extract %s -func=use_before_init | FileCheck %s
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
// For now we do not remove dead functions so update this when that functionality is added.
|
|
|
|
// CHECK-NOT: sil @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()
|
|
sil @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()
|
|
|
|
// CHECK-NOT: sil @makesInt : $@convention(thin) () -> Int64
|
|
sil @makesInt : $@convention(thin) () -> Int64
|
|
|
|
// CHECK-LABEL: sil @use_before_init : $@convention(thin) () -> Int64 {
|
|
// CHECK: bb0:
|
|
// CHECK: return
|
|
// CHECK: }
|
|
sil @use_before_init : $@convention(thin) () -> Int64 {
|
|
bb0:
|
|
%1 = alloc_box $Int64
|
|
%1a = project_box %1 : $@box Int64
|
|
%2 = load %1a : $*Int64
|
|
%3 = function_ref @inout_uninit : $@convention(thin)() -> ()
|
|
apply %3() : $@convention(thin) () -> ()
|
|
strong_release %1 : $@box Int64
|
|
%4 = return %2 : $Int64
|
|
}
|
|
|
|
// CHECK-NOT: sil @inout_uninit : $@convention(thin) () -> () {
|
|
sil @inout_uninit : $@convention(thin) () -> () {
|
|
bb0:
|
|
%1 = alloc_box $Int64
|
|
%1a = project_box %1 : $@box Int64
|
|
%5 = function_ref @takes_Int_inout : $@convention(thin) (@inout Int64) -> ()
|
|
%6 = apply %5(%1a) : $@convention(thin) (@inout Int64) -> ()
|
|
|
|
%0 = tuple ()
|
|
strong_release %1 : $@box Int64
|
|
return %0 : $()
|
|
}
|