// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s -devirtualizer -sil-combine | %FileCheck %s
sil_stage canonical

import Builtin
import Swift
import SwiftShims

protocol CanAdd {
  static func +(lhs: Self, rhs: Self) -> Self
}

extension Int64 : CanAdd {
}

struct S<T> : CanAdd {
}

func +<T>(lhs: S<T>, rhs: S<T>) -> S<T>


sil hidden [transparent] [thunk] @operator_plus_static_non_generic_witness_for_S : $@convention(witness_method) <T> (@in S<T>, @in S<T>, @thick S<T>.Type) -> @out S<T> {
bb0(%0 : $*S<T>, %1 : $*S<T>, %2 : $*S<T>, %3 : $@thick S<T>.Type) :
  %17 = tuple ()
  return %17 : $()
}

sil hidden [transparent] [thunk] @operator_plus_static_non_generic_witness : $@convention(witness_method) (@in Int64, @in Int64, @thick Int64.Type) -> @out Int64 {
bb0(%0 : $*Int64, %1 : $*Int64, %2 : $*Int64, %3 : $@thick Int64.Type):
  %4 = struct_element_addr %1 : $*Int64, #Int64._value
  %5 = load %4 : $*Builtin.Int64
  %6 = struct_element_addr %2 : $*Int64, #Int64._value
  %7 = load %6 : $*Builtin.Int64
  %8 = integer_literal $Builtin.Int1, -1
  %9 = builtin "sadd_with_overflow_Int64"(%5 : $Builtin.Int64, %7 : $Builtin.Int64, %8 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %10 = tuple_extract %9 : $(Builtin.Int64, Builtin.Int1), 0
  %11 = tuple_extract %9 : $(Builtin.Int64, Builtin.Int1), 1
  cond_fail %11 : $Builtin.Int1
  %15 = struct $Int64 (%10 : $Builtin.Int64)
  store %15 to %0 : $*Int64
  %17 = tuple ()
  return %17 : $()
}

// Test that this partial application of a function reference referring to static non generic witness does not crash the IRGen.
// Such code may be produced e.g. when users refer to global operators defined on builtin types.
// CHECK-LABEL: sil hidden @test_partial_apply_of_static_witness
sil hidden @test_partial_apply_of_static_witness : $@convention(thin) () -> @callee_owned (@in Int64, @in Int64) -> @out Int64 {
bb0:
  %1 = metatype $@thick Int64.Type
  %2 = function_ref @operator_plus_static_non_generic_witness : $@convention(witness_method) (@in Int64, @in Int64, @thick Int64.Type) -> @out Int64
  %3 = partial_apply %2(%1) : $@convention(witness_method) (@in Int64, @in Int64, @thick Int64.Type) -> @out Int64
  return %3 : $@callee_owned (@in Int64, @in Int64) -> @out Int64
}

// Test that this partial application of witness_method can be devirtualized.
// CHECK-LABEL: sil hidden @test_devirt_of_partial_apply_of_witness_method
// CHECK-NOT: witness_method $S<Int64>, #CanAdd."+"!1
// CHECK: function_ref @operator_plus_static_non_generic_witness_for_S
// CHECK: partial_apply
// CHECK: return
sil hidden @test_devirt_of_partial_apply_of_witness_method : $@convention(thin) () -> @callee_owned (@in S<Int64>, @in S<Int64>) -> @out S<Int64> {
bb0:
  %1 = metatype $@thick S<Int64>.Type
  %2 = witness_method $S<Int64>, #CanAdd."+"!1 : $@convention(witness_method) <τ_0_0 where τ_0_0 : CanAdd> (@in τ_0_0, @in τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
  %3 = partial_apply %2<S<Int64>>(%1) : $@convention(witness_method) <τ_0_0 where τ_0_0 : CanAdd> (@in τ_0_0, @in τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
  return %3 : $@callee_owned (@in S<Int64>, @in S<Int64>) -> @out S<Int64>
}

// Test that this application of witness_method can be devirtualized.
// CHECK-LABEL: sil hidden @test_devirt_of_apply_of_witness_method
// CHECK-NOT: witness_method $S<Int64>, #CanAdd."+"!1
// CHECK: function_ref @operator_plus_static_non_generic_witness_for_S
// CHECK: apply
// CHECK: return
sil hidden @test_devirt_of_apply_of_witness_method : $@convention(thin) (@in S<Int64>) -> S<Int64> {
bb0(%0 : $*S<Int64>):
  %1 = alloc_stack $S<Int64>
  %5 = metatype $@thick S<Int64>.Type
  %6 = witness_method $S<Int64>, #CanAdd."+"!1 : $@convention(witness_method) <τ_0_0 where τ_0_0 : CanAdd> (@in τ_0_0, @in τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
  %7 = apply %6<S<Int64>>(%1, %0, %0, %5) : $@convention(witness_method) <τ_0_0 where τ_0_0 : CanAdd> (@in τ_0_0, @in τ_0_0, @thick τ_0_0.Type) -> @out τ_0_0
  %8 = load %1: $*S<Int64>
  dealloc_stack %1 : $*S<Int64>
  return %8 : $S<Int64>
}

sil_witness_table hidden Int64: CanAdd module Test {
  method #CanAdd."+"!1: @operator_plus_static_non_generic_witness
}

sil_witness_table hidden <E where E : CanAdd> S<E>: CanAdd module Test {
  method #CanAdd."+"!1: @operator_plus_static_non_generic_witness_for_S
}

