mirror of
https://github.com/apple/swift.git
synced 2026-02-27 18:26:24 +01:00
Even if an indirect argument is unused, pretend that the function reads from it. If the unused argument is passed to another generic function and that function is specialized, the argument may be re-abstracted and the specializer inserts a load from the indirect argument. Therefore we must be prepared that unused indirect argument might get loaded from at some time. Fixes a compiler crash rdar://168623362
41 lines
1.8 KiB
Plaintext
41 lines
1.8 KiB
Plaintext
// RUN: %empty-directory(%t)
|
|
// RUN: %target-swift-frontend %S/Inputs/shared_function_serialization_input.swift -o %t/Swift.swiftmodule -emit-module -parse-as-library -parse-stdlib -module-link-name swiftCore -module-name Swift -O
|
|
// RUN: %target-sil-opt -enable-sil-verify-all -I %t -performance-linker -inline %s -o - | %FileCheck %s
|
|
|
|
// CHECK: sil private @top_level_code
|
|
// CHECK: sil public_external [serialized] [ossa] @$ss1XVABycfC{{.*}}
|
|
// CHECK: sil public_external [serialized] [ossa] @$ss17the_thing_it_does1xys1XV_tF{{.*}}
|
|
// CHECK: sil shared [serialized] [noinline] [ossa] @$ss9the_thing1tyx_tlFs1XV_Tgq5{{.*}}
|
|
|
|
sil_stage canonical
|
|
|
|
import Builtin
|
|
import Swift
|
|
|
|
sil_global @x : $X
|
|
|
|
// top_level_code
|
|
sil private @top_level_code : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = global_addr @x : $*X // users: %4, %6
|
|
// function_ref Swift.X.init (Swift.X.Type)() -> Swift.X
|
|
%1 = function_ref @$ss1XVABycfC : $@convention(method) (@thin X.Type) -> X // user: %3
|
|
%2 = metatype $@thin X.Type // user: %3
|
|
%3 = apply %1(%2) : $@convention(method) (@thin X.Type) -> X // user: %4
|
|
store %3 to %0 : $*X // id: %4
|
|
// function_ref Swift.the_thing_it_does (x : Swift.X) -> ()
|
|
%5 = function_ref @$ss17the_thing_it_does1xys1XV_tF : $@convention(thin) (X) -> () // user: %7
|
|
%6 = load %0 : $*X // user: %7
|
|
%7 = apply %5(%6) : $@convention(thin) (X) -> ()
|
|
%8 = tuple () // user: %9
|
|
return %8 : $() // id: %9
|
|
}
|
|
|
|
// Swift.X.init (Swift.X.Type)() -> Swift.X
|
|
sil @$ss1XVABycfC : $@convention(method) (@thin X.Type) -> X
|
|
|
|
// Swift.the_thing_it_does (x : Swift.X) -> ()
|
|
sil @$ss17the_thing_it_does1xys1XV_tF : $@convention(thin) (X) -> ()
|
|
|
|
|