// RUN: %target-sil-opt -enable-sil-verify-all -inline -performance-constant-propagation -sil-verify-without-invalidation

sil_stage canonical

import Builtin
import Swift
import SwiftShims

private class Foo {
  func speak()
  deinit
  init()
}

private class Foo2 : Foo {
  override func speak()
  deinit
  override init()
}

// static Swift.Process._argc : Swift.Int32
sil_global [serialized] @_TZvOs7Process5_argcVs5Int32 : $Int32

// globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5
sil_global private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $Builtin.Word

// static Swift.Process._unsafeArgv : Swift.UnsafeMutablePointer<Swift.UnsafeMutablePointer<Swift.Int8>>
sil_global [serialized] @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>

// main
sil @main : $@convention(c) (Int32, UnsafeMutablePointer<UnsafeMutablePointer<Int8>>) -> Int32 {
bb0(%0 : $Int32, %1 : $UnsafeMutablePointer<UnsafeMutablePointer<Int8>>):
  %2 = global_addr @_TZvOs7Process5_argcVs5Int32 : $*Int32 // user: %3
  store %0 to %2 : $*Int32                        // id: %3
  %4 = global_addr @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_token5 : $*Builtin.Word // user: %5
  %5 = address_to_pointer %4 : $*Builtin.Word to $Builtin.RawPointer // user: %7
  // function_ref globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5
  %6 = function_ref @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> () // user: %7
  %7 = builtin "once"(%5 : $Builtin.RawPointer, %6 : $@convention(thin) () -> ()) : $()
  %8 = global_addr @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // user: %9
  store %1 to %8 : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // id: %9
  %10 = integer_literal $Builtin.Int32, 0         // user: %11
  %11 = struct $Int32 (%10 : $Builtin.Int32)      // user: %12
  return %11 : $Int32                             // id: %12
}

// Swift._didEnterMain (Swift.Int32, argv : Swift.UnsafeMutablePointer<Swift.UnsafeMutablePointer<Swift.Int8>>) -> ()
sil [transparent] [serialized] @_TFs13_didEnterMainFTVs5Int324argvGVs20UnsafeMutablePointerGS0_Vs4Int8___T_ : $@convention(thin) (Int32, UnsafeMutablePointer<UnsafeMutablePointer<Int8>>) -> ()

// main.(Foo in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo in _9ACC0692747077F216D14C36CD927671))() -> ()
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Foo5speakfS0_FT_T_ : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  debug_value %0 : $Foo                           // id: %1
  // function_ref speakFoo
  %2 = function_ref @speakFoo : $@convention(thin) () -> () // user: %3
  %3 = apply %2() : $@convention(thin) () -> ()
  %4 = tuple ()                                   // user: %5
  return %4 : $()                                 // id: %5
}

// speakFoo
sil hidden_external @speakFoo : $@convention(thin) () -> ()

// main.(Foo in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FooD : $@convention(method) (@owned Foo) -> () {
bb0(%0 : $Foo):
  debug_value %0 : $Foo                           // id: %1
  dealloc_ref %0 : $Foo                           // id: %2
  %3 = tuple ()                                   // user: %4
  return %3 : $()                                 // id: %4
}

// main.(Foo in _9ACC0692747077F216D14C36CD927671).deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Food : $@convention(method) (@guaranteed Foo) -> @owned Builtin.NativeObject {
bb0(%0 : $Foo):
  debug_value %0 : $Foo                           // id: %1
  %2 = unchecked_ref_cast %0 : $Foo to $Builtin.NativeObject // user: %3
  return %2 : $Builtin.NativeObject               // id: %3
}

// main.(Foo in _9ACC0692747077F216D14C36CD927671).init (main.(Foo in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FoocfMS0_FT_S0_ : $@convention(method) (@owned Foo) -> @owned Foo {
bb0(%0 : $Foo):
  debug_value %0 : $Foo                           // id: %1
  return %0 : $Foo                                // id: %2
}

// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo2 in _9ACC0692747077F216D14C36CD927671))() -> ()
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo25speakfS0_FT_T_ : $@convention(method) (@guaranteed Foo2) -> () {
bb0(%0 : $Foo2):
  debug_value %0 : $Foo2                          // id: %1
  // function_ref speakFoo2
  %2 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %3
  %3 = apply %2() : $@convention(thin) () -> ()
  %4 = tuple ()                                   // user: %5
  return %4 : $()                                 // id: %5
}

// speakFoo2
sil hidden_external @speakFoo2 : $@convention(thin) () -> ()

// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2D : $@convention(method) (@owned Foo2) -> () {
bb0(%0 : $Foo2):
  debug_value %0 : $Foo2                          // id: %1
  dealloc_ref %0 : $Foo2                          // id: %2
  %3 = tuple ()                                   // user: %4
  return %3 : $()                                 // id: %4
}

// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).deinit
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2d : $@convention(method) (@guaranteed Foo2) -> @owned Builtin.NativeObject {
bb0(%0 : $Foo2):
  debug_value %0 : $Foo2                          // id: %1
  %2 = unchecked_ref_cast %0 : $Foo2 to $Builtin.NativeObject // user: %3
  return %2 : $Builtin.NativeObject               // id: %3
}

// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2cfMS0_FT_S0_ : $@convention(method) (@owned Foo2) -> @owned Foo2 {
bb0(%0 : $Foo2):
  return %0 : $Foo2                               // id: %2
}

// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__allocating_init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
sil private @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2CfMS0_FT_S0_ : $@convention(thin) (@thick Foo2.Type) -> @owned Foo2 {
bb0(%0 : $@thick Foo2.Type):
  %1 = alloc_ref $Foo2                            // user: %3
  return %1 : $Foo2                               // id: %3
}

// main.callSpeak () -> ()
sil hidden @_TF4main9callSpeakFT_T_ : $@convention(thin) () -> () {
bb0:
  %0 = alloc_ref $Foo2                            // users: %2, %3, %4, %27
  debug_value %0 : $Foo2                          // id: %2
  strong_retain %0 : $Foo2                        // id: %3
  %4 = upcast %0 : $Foo2 to $Foo                  // users: %5, %6, %17, %23
  checked_cast_br %0 : $Foo2 to $Foo2, bb1, bb6    // id: %6

bb1(%7 : $Foo2):                                  // Preds: bb0
  %8 = enum $Optional<Foo2>, #Optional.some!enumelt.1, %7 : $Foo2 // user: %9
  br bb2(%8 : $Optional<Foo2>)                    // id: %9

bb2(%10 : $Optional<Foo2>):                       // Preds: bb1 bb6
  switch_enum %10 : $Optional<Foo2>, case #Optional.some!enumelt.1: bb3, default bb5 // id: %11

bb3(%12 : $Foo2):                                 // Preds: bb2
  // function_ref speakFoo2
  %13 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %14
  %14 = apply %13() : $@convention(thin) () -> ()
  strong_release %12 : $Foo2                      // id: %15
  br bb4                                          // id: %16

bb4:                                              // Preds: bb3 bb5
  strong_release %4 : $Foo                        // id: %17
  %18 = tuple ()                                  // user: %19
  br bb7(%18 : $())                               // id: %19

bb5:                                              // Preds: bb2
  // function_ref speakFoo2
  %20 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %21
  %21 = apply %20() : $@convention(thin) () -> ()
  br bb4                                          // id: %22

bb6:                                              // Preds: bb0
  strong_release %4 : $Foo                        // id: %23
  %24 = enum $Optional<Foo2>, #Optional.none!enumelt // user: %25
  br bb2(%24 : $Optional<Foo2>)                   // id: %25

bb7(%26 : $()):                                   // Preds: bb4
  strong_release %0 : $Foo2                       // id: %27
  %28 = tuple ()                                  // user: %29
  return %28 : $()                                // id: %29
}

// main.(speak in _9ACC0692747077F216D14C36CD927671) (main.(Foo in _9ACC0692747077F216D14C36CD927671)) -> ()
sil private [always_inline] @_TF4mainP33_9ACC0692747077F216D14C36CD9276715speakFCS_P33_9ACC0692747077F216D14C36CD9276713FooT_ : $@convention(thin) (@owned Foo) -> () {
bb0(%0 : $Foo):
  debug_value %0 : $Foo                           // id: %1
  strong_retain %0 : $Foo                         // id: %2
  checked_cast_br %0 : $Foo to $Foo2, bb1, bb2    // id: %3

bb1(%4 : $Foo2):                                  // Preds: bb0
  %5 = enum $Optional<Foo2>, #Optional.some!enumelt.1, %4 : $Foo2 // user: %6
  br bb3(%5 : $Optional<Foo2>)                    // id: %6

bb2:                                              // Preds: bb0
  strong_release %0 : $Foo                        // id: %7
  %8 = enum $Optional<Foo2>, #Optional.none!enumelt // user: %9
  br bb3(%8 : $Optional<Foo2>)                    // id: %9

bb3(%10 : $Optional<Foo2>):                       // Preds: bb1 bb2
  switch_enum %10 : $Optional<Foo2>, case #Optional.some!enumelt.1: bb4, default bb5 // id: %11

bb4(%12 : $Foo2):                                 // Preds: bb3
  debug_value %12 : $Foo2                         // id: %13
  // function_ref speakFoo2
  %14 = function_ref @speakFoo2 : $@convention(thin) () -> () // user: %15
  %15 = apply %14() : $@convention(thin) () -> ()
  strong_release %12 : $Foo2                      // id: %16
  br bb6                                          // id: %17

bb5:                                              // Preds: bb3
  %18 = class_method %0 : $Foo, #Foo.speak!1 : Foo -> () -> (), $@convention(method) (@guaranteed Foo) -> () // user: %19
  %19 = apply %18(%0) : $@convention(method) (@guaranteed Foo) -> ()
  br bb6                                          // id: %20

bb6:                                              // Preds: bb4 bb5
  strong_release %0 : $Foo                        // id: %21
  %22 = tuple ()                                  // user: %23
  return %22 : $()                                // id: %23
}

// globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5
sil private_external [serialized] @globalinit_33_1BDF70FFC18749BAB495A73B459ED2F0_func5 : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @_TZvOs7Process11_unsafeArgvGVs20UnsafeMutablePointerGS0_Vs4Int8__ : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // user: %4
  %1 = integer_literal $Builtin.Int8, 0           // user: %2
  %2 = builtin "inttoptr_Int8"(%1 : $Builtin.Int8) : $Builtin.RawPointer // user: %3
  %3 = struct $UnsafeMutablePointer<UnsafeMutablePointer<Int8>> (%2 : $Builtin.RawPointer) // user: %4
  store %3 to %0 : $*UnsafeMutablePointer<UnsafeMutablePointer<Int8>> // id: %4
  %5 = tuple ()                                   // user: %6
  return %5 : $()                                 // id: %6
}

sil_vtable Foo {
  #Foo.speak!1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713Foo5speakfS0_FT_T_	// main.(Foo in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo in _9ACC0692747077F216D14C36CD927671))() -> ()
  #Foo.deinit!deallocator.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FooD	// main.(Foo in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
  #Foo.init!initializer.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276713FoocfMS0_FT_S0_	// main.(Foo in _9ACC0692747077F216D14C36CD927671).init (main.(Foo in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo in _9ACC0692747077F216D14C36CD927671)
}

sil_vtable Foo2 {
  #Foo.speak!1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo25speakfS0_FT_T_	// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).speak (main.(Foo2 in _9ACC0692747077F216D14C36CD927671))() -> ()
  #Foo.init!initializer.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2cfMS0_FT_S0_	// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).init (main.(Foo2 in _9ACC0692747077F216D14C36CD927671).Type)() -> main.(Foo2 in _9ACC0692747077F216D14C36CD927671)
  #Foo2.deinit!deallocator.1: @_TFC4mainP33_9ACC0692747077F216D14C36CD9276714Foo2D	// main.(Foo2 in _9ACC0692747077F216D14C36CD927671).__deallocating_deinit
}
