// RUN: %target-swift-frontend -emit-ir %s -module-name main | %FileCheck %s sil_stage canonical struct Box { @inline(never) static func foo() {} } // Reference a function in a way that will be specialized. sil @test : $@convention(thin) () -> () { bb0: // function_ref static Box.foo() -> () %0 = function_ref @$s4main3BoxV3fooyyFZ : $@convention(thin) <τ_0_0> (@thin Box<τ_0_0>.Type) -> () // user: %2 %1 = metatype $@thin Box<()>.Type // user: %2 %2 = apply %0<()>(%1) : $@convention(thin) <τ_0_0> (@thin Box<τ_0_0>.Type) -> () %3 = tuple () // user: %4 return %3 : $() // id: %4 } // This is the unspecialized form. sil hidden @$s4main3BoxV3fooyyFZ : $@convention(thin) (@thin Box.Type) -> () { bb0(%0 : $@thin Box.Type): %1 = tuple () return %1 : $() } // generic specialization <()> of static main.Box.foo () -> () // This specialization is one that would be matched by the prespecialization // pass. sil shared @$s4main3BoxV3fooyyFZyt_Tg5 : $@convention(thin) (@thin Box<()>.Type) -> () { bb0(%0 : $@thin Box<()>.Type): %1 = tuple () return %1 : $() } // CHECK-DAG: define linkonce_odr hidden swiftcc void @"$s4main3BoxV3fooyyFZyt_Tg5"() {{.*}}{ // CHECK-DAG: call swiftcc void @"$s4main3BoxV3fooyyFZyt_Tg5"()