// RUN: %target-sil-opt -enable-sil-verify-all -inline %s | %FileCheck %s

// Check if cloning of init_existential_* works correctly with multiple
// conformances.

sil_stage canonical

import Builtin

typealias AnyObject = Builtin.AnyObject

protocol ClassProto1 : class {
}

protocol ClassProto2 : class {
}

class MyClass : ClassProto1, ClassProto2 {
}

protocol Proto1 {
}

protocol Proto2 {
}

class MyClass2 : Proto1, Proto2 {
}

// CHECK-LABEL: sil @test_ref
sil @test_ref : $@convention(thin) (@guaranteed MyClass) -> () {
bb0(%0 : $MyClass):
  %6 = init_existential_ref %0 : $MyClass : $MyClass, $ClassProto1 & ClassProto2
  %11 = tuple ()
  return %11 : $()
}

// CHECK-LABEL: sil @call_test_ref
// CHECK: init_existential_ref
sil @call_test_ref : $@convention(thin) (@guaranteed MyClass) -> () {
bb0(%0 : $MyClass):
  %1 = function_ref @test_ref : $@convention(thin) (@guaranteed MyClass) -> ()
  %3 = apply %1(%0) : $@convention(thin) (@guaranteed MyClass) -> ()
  return %3 : $()
}


// CHECK-LABEL: sil @test_addr
sil @test_addr : $@convention(thin) (@guaranteed MyClass2) -> @out Proto1 & Proto2 {
bb0(%0 : $*Proto1 & Proto2, %1 : $MyClass2):
  %3 = init_existential_addr %0 : $*Proto1 & Proto2, $MyClass2
  store %1 to %3 : $*MyClass2
  %5 = tuple ()
  return %5 : $()
}

// CHECK-LABEL: sil @call_test_addr
// CHECK: init_existential_addr
sil @call_test_addr : $@convention(thin) (@guaranteed MyClass2) -> @out Proto1 & Proto2 {
bb0(%0 : $*Proto1 & Proto2, %1 : $MyClass2):
  %3 = function_ref @test_addr : $@convention(thin) (@guaranteed MyClass2) -> @out Proto1 & Proto2
  %5 = apply %3(%0, %1) : $@convention(thin) (@guaranteed MyClass2) -> @out Proto1 & Proto2
  %7 = tuple ()
  return %7 : $()
}

