Revision a87ef76f85c8c42fa15329ea53adda4793bf9686 authored by Mishal Shah on 27 August 2019, 23:26:43 UTC, committed by GitHub on 27 August 2019, 23:26:43 UTC
2 parent s 148ea44 + 4d66676
Raw File
restricted-partial-apply.sil
// RUN: %target-swift-frontend -module-name main -disable-sil-partial-apply -emit-sil -sil-verify-all %s
sil_stage canonical
import Builtin

class C {}

sil @native_object_context : $@convention(thin) (@owned Builtin.NativeObject) -> ()
sil @box_context : $@convention(thin) (@owned <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
sil @class_context : $@convention(thin) (@owned C) -> ()

sil @g_native_object_context : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
sil @g_box_context : $@convention(thin) (@guaranteed <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
sil @g_class_context : $@convention(thin) (@guaranteed C) -> ()

sil @limited_partial_applies : $@convention(thin) (Builtin.NativeObject, <τ_0_0> { var τ_0_0 } <Builtin.Word>, C) -> () {
entry(%0 : @unowned $Builtin.NativeObject, %1 : @unowned $<τ_0_0> { var τ_0_0 } <Builtin.Word>, %2 : @unowned $C):
  %a = function_ref @native_object_context : $@convention(thin) (@owned Builtin.NativeObject) -> ()
  %b = function_ref @box_context : $@convention(thin) (@owned <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
  %c = function_ref @class_context : $@convention(thin) (@owned C) -> ()

  %d = function_ref @g_native_object_context : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
  %e = function_ref @g_box_context : $@convention(thin) (@guaranteed <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
  %f = function_ref @g_class_context : $@convention(thin) (@guaranteed C) -> ()

  %g = partial_apply %a(%0) : $@convention(thin) (@owned Builtin.NativeObject) -> ()
  %h = partial_apply %b(%1) : $@convention(thin) (@owned <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
  %i = partial_apply %c(%2) : $@convention(thin) (@owned C) -> ()

  %j = partial_apply [callee_guaranteed] %d(%0) : $@convention(thin) (@guaranteed Builtin.NativeObject) -> ()
  %k = partial_apply [callee_guaranteed] %e(%1) : $@convention(thin) (@guaranteed <τ_0_0> { var τ_0_0 } <Builtin.Word>) -> ()
  %l = partial_apply [callee_guaranteed] %f(%2) : $@convention(thin) (@guaranteed C) -> ()

  return undef : $()
}
back to top