// RUN: %target-sil-opt -enable-sil-verify-all %s -early-inline -sil-inline-threshold=50 | %FileCheck %s sil_stage canonical import Builtin import Swift sil [_semantics "no_inline_plz"] @callee_func : $@convention(thin) () -> Int32 { bb0: %0 = integer_literal $Builtin.Int32, 3 %1 = struct $Int32 (%0 : $Builtin.Int32) return %1 : $Int32 } //CHECK-LABEL: caller_func //CHECK-NOT: function_ref //CHECK-NOT: apply //CHECK: end sil function 'caller_func' sil @caller_func : $@convention(thin) () -> Int32 { bb0: %0 = function_ref @callee_func : $@convention(thin) () -> Int32 %1 = apply %0() : $@convention(thin) () -> Int32 return %1 : $Int32 } sil [_semantics "array.make_mutable"] @callee_func_with_to_be_skipped_during_inlining_semantics : $@convention(method) (@inout Int32) -> Int32 { bb0(%self : $*Int32): %0 = integer_literal $Builtin.Int32, 3 %1 = struct $Int32 (%0 : $Builtin.Int32) return %1 : $Int32 } //CHECK-LABEL: caller_func2 //CHECK: function_ref //CHECK: apply //CHECK: end sil function 'caller_func2' sil @caller_func2 : $@convention(thin) () -> Int32 { bb0: %self = alloc_stack $Int32 %0 = function_ref @callee_func_with_to_be_skipped_during_inlining_semantics : $@convention(method) (@inout Int32) -> Int32 // user: %1 %1 = apply %0(%self) : $@convention(method) (@inout Int32) -> Int32 dealloc_stack %self : $*Int32 return %1 : $Int32 } // A function annotated with the @_effects(readonly) attribute. sil [readonly] @callee_func2 : $@convention(thin) () -> Int32 { bb0: %0 = integer_literal $Builtin.Int32, 3 %1 = struct $Int32 (%0 : $Builtin.Int32) return %1 : $Int32 } //CHECK-LABEL: caller_func1 //CHECK: function_ref //CHECK: apply //CHECK-NEXT: ret sil @caller_func1 : $@convention(thin) () -> Int32 { bb0: %0 = function_ref @callee_func2 : $@convention(thin) () -> Int32 %1 = apply %0() : $@convention(thin) () -> Int32 return %1 : $Int32 }