// RUN: %target-sil-opt -enable-sil-verify-all %s -jumpthread-simplify-cfg | %FileCheck %s

// REQUIRES: objc_interop
// FIXME: this test relies on standard library implementation details that are
// only present with Objective-C runtime.

// Check that this SIL compiles without crashes. See rdar://20345557

sil_stage canonical

import Builtin
import Swift
import SwiftShims

class Base {
}

class Derived1: Base {}

class Derived2: Base {}

struct S {}

enum MyOptional<T> {
  case none
  case some(T)
}

sil @method1 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Derived1) -> @out MyOptional<τ_0_0>
sil @method2 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Base) -> @out MyOptional<τ_0_0>

// CHECK: sil [serialized] @_TFCs28__ContiguousArrayStorageBase25withUnsafeBufferOfObjectsfS_U__FFGVs19UnsafeBufferPointerPs9AnyObject__Q_Q_
sil [serialized] @_TFCs28__ContiguousArrayStorageBase25withUnsafeBufferOfObjectsfS_U__FFGVs19UnsafeBufferPointerPs9AnyObject__Q_Q_ : $@convention(method) <R> (@owned @callee_owned (S) -> @out R, @guaranteed Base) -> @out R {
bb0(%0 : $*R, %1 : $@callee_owned (S) -> @out R, %2 : $Base):
  %3 = alloc_stack $MyOptional<R>                   // users: %9, %12, %13, %15, %20, %26, %33, %42, %50, %54
  checked_cast_br [exact] %2 : $Base to $Derived1, bb1, bb2 // id: %4

bb1(%5 : $Derived1):                    // Preds: bb0
  %6 = function_ref @method1 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Derived1) -> @out MyOptional<τ_0_0> // user: %9
  strong_retain %1 : $@callee_owned (S) -> @out R // id: %7
  strong_retain %2 : $Base // id: %8
  %9 = apply %6<R>(%3, %1, %5) : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Derived1) -> @out MyOptional<τ_0_0>
  br bb3                                          // id: %10

bb2:                                              // Preds: bb0
  checked_cast_br [exact] %2 : $Base to $Derived2, bb6, bb7 // id: %11

bb3:                                              // Preds: bb1 bb6 bb8 bb10
  switch_enum_addr %3 : $*MyOptional<R>, case #MyOptional.some!enumelt.1: bb4, case #MyOptional.none!enumelt: bb5 // id: %12

bb4:                                              // Preds: bb3
  %13 = unchecked_take_enum_data_addr %3 : $*MyOptional<R>, #MyOptional.some!enumelt.1 // user: %14
  copy_addr [take] %13 to [initialization] %0 : $*R // id: %14
  dealloc_stack %3 : $*MyOptional<R> // id: %15
  strong_release %2 : $Base // id: %16
  strong_release %1 : $@callee_owned (S) -> @out R // id: %17
  %18 = tuple ()                                  // user: %19
  return %18 : $()                                // id: %19

bb5:                                              // Preds: bb3
  dealloc_stack %3 : $*MyOptional<R> // id: %20
  unreachable                                     // id: %21

bb6(%22 : $Derived2):             // Preds: bb2
  strong_retain %1 : $@callee_owned (S) -> @out R // id: %24
  strong_retain %2 : $Base // id: %25
  br bb3                                          // id: %27

bb7:                                              // Preds: bb2
  checked_cast_br [exact] %2 : $Base to $Base, bb8, bb9 // id: %28

bb8(%29 : $Base):          // Preds: bb7
  %30 = function_ref @method2 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Base) -> @out MyOptional<τ_0_0> // user: %33
  strong_retain %1 : $@callee_owned (S) -> @out R // id: %31
  strong_retain %2 : $Base // id: %32
  %33 = apply %30<R>(%3, %1, %29) : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Base) -> @out MyOptional<τ_0_0>
  br bb3                                          // id: %34

bb9:                                              // Preds: bb7
  strong_retain %1 : $@callee_owned (S) -> @out R // id: %35
  checked_cast_br [exact] %2 : $Base to $Derived1, bb11, bb12 // id: %36

bb10(%37 : $()):                                  // Preds: bb11 bb13
  br bb3                                          // id: %38

bb11(%39 : $Derived1):                  // Preds: bb9
  strong_retain %39 : $Derived1         // id: %40
  %41 = function_ref @method1 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Derived1) -> @out MyOptional<τ_0_0> // user: %42
  %42 = apply %41<R>(%3, %1, %39) : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Derived1) -> @out MyOptional<τ_0_0> // user: %43
  br bb10(%42 : $())                              // id: %43

bb12:                                             // Preds: bb9
  checked_cast_br [exact] %2 : $Base to $Base, bb14, bb15 // id: %44

bb13(%45 : $()):                                  // Preds: bb14 bb15
  br bb10(%45 : $())                              // id: %46

bb14(%47 : $Base):         // Preds: bb12
  strong_retain %47 : $Base // id: %48
  %49 = function_ref @method2 : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Base) -> @out MyOptional<τ_0_0> // user: %50
  %50 = apply %49<R>(%3, %1, %47) : $@convention(method) <τ_0_0> (@owned @callee_owned (S) -> @out τ_0_0, @guaranteed Base) -> @out MyOptional<τ_0_0> // user: %51
  br bb13(%50 : $())                              // id: %51

bb15:                                             // Preds: bb12
  strong_retain %2 : $Base // id: %52
  %54 = tuple ()
  br bb13(%54 : $())                              // id: %55
}

// CHECK-LABEL: sil @multiple_edits_in_adjacent_blocks
// CHECK: bb0(%0 : $*Base):
// CHECK: checked_cast_br %
// CHECK: bb1:
// CHECK: checked_cast_br [exact]
// CHECK-NOT: checked_cast_br
// CHECK: return
sil @multiple_edits_in_adjacent_blocks : $@convention(method) (@in Base) -> () {
bb0(%0 : $*Base):
  %1 = load %0 : $*Base
  checked_cast_br %1 : $Base to $Derived1, bb8, bb1

bb1:
  checked_cast_br [exact] %1 : $Base to $Derived2, bb2, bb5

bb2(%6 : $Derived2):
  %7 = upcast %6 : $Derived2 to $Base
  debug_value %7 : $Base, let, name "self", argno 1
  checked_cast_br [exact] %7 : $Base to $Base, bb3, bb6

bb3(%10 : $Base):
  debug_value %10 : $Base, let, name "self", argno 1
  checked_cast_br %10 : $Base to $Derived1, bb4, bb7

bb4(%13 : $Derived1):
  debug_value %13 : $Derived1, let, name "scr"
  br bb9

bb5:
  br bb9

bb6:
  br bb9

bb7:
  br bb9

bb8(%14 : $Derived1):
  br bb9

bb9:
  %20 = tuple ()
  return %20 : $()
}
