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

sil_stage canonical

import Builtin
import Swift

/*
class Foo {
  var m_val : Int32
  init(x : Int32) { m_val = x }
  func get() -> Int32 {return m_val}
}
func test_me(x : Int32) -> Foo { return Foo(x) }
func main() { print(test_me(3).get()) } */

class Foo {
  var m_val: Int32
  init(x: Int32)
  func get() -> Int32
}

//CHECK: _TF4main4mainFT_T_
//CHECK: function_ref @_TFC4main3Foo3getfS0_FT_Si
//CHECK: return
sil @_TF4main4mainFT_T_ : $@convention(thin) () -> () {
bb0:
  // function_ref swift
  %0 = function_ref @_Ts5printFT3valSi_T_ : $@convention(thin) (Int32) -> () // user: %8
  %1 = integer_literal $Builtin.Int32, 3          // user: %2
  %2 = struct $Int32 (%1 : $Builtin.Int32)        // user: %5
  %3 = alloc_ref $Foo                             // users: %6, %7, %4
  %4 = ref_element_addr %3 : $Foo, #Foo.m_val     // user: %5
  store %2 to %4 : $*Int32                        // id: %5
  %6 = class_method %3 : $Foo, #Foo.get!1 : (Foo) -> () -> Int32 , $@convention(method) (@guaranteed Foo) -> Int32 // user: %7
  %7 = apply %6(%3) : $@convention(method) (@guaranteed Foo) -> Int32 // user: %8
  %8 = apply %0(%7) : $@convention(thin) (Int32) -> ()
  %9 = tuple ()                                   // user: %10
  return %9 : $()                                 // id: %10
}

sil @_Ts5printFT3valSi_T_ : $@convention(thin) (Int32) -> ()

// main.Foo.get (main.Foo)() -> Swift.Int32
sil [noinline] @_TFC4main3Foo3getfS0_FT_Si : $@convention(method) (@guaranteed Foo) -> Int32 {
bb0(%0 : $Foo):
  %1 = ref_element_addr %0 : $Foo, #Foo.m_val     // user: %2
  %2 = load %1 : $*Int32                          // user: %4
  return %2 : $Int32                              // id: %4
}

sil_vtable Foo {
  #Foo.get!1: _TFC4main3Foo3getfS0_FT_Si
}
