// RUN: %target-swift-frontend -parse-sil -emit-ir %s | %FileCheck %s
// REQUIRES: OS=macosx

// Make sure that we are using type lowering and that we are handling the return
// value correctly.

sil_stage canonical

import Builtin

struct Foo {
  var t1 : Builtin.Int32
  var c1 : Builtin.NativeObject
  var t2 : Builtin.Int32
  var c2 : Builtin.NativeObject
  var t3 : Builtin.Int32
}

// CHECK: define{{( protected)?}} swiftcc void @trivial(
// CHECK-NEXT: entry
// CHECK-NEXT: ret void
sil @trivial : $@convention(thin) (Builtin.Int32) -> () {
bb0(%0 : $Builtin.Int32):
  %1 = copy_value %0 : $Builtin.Int32
  destroy_value %1 : $Builtin.Int32
  %2 = tuple()
  return %2 : $()
}

// CHECK: define{{( protected)?}} swiftcc void @non_trivial(
// CHECK: [[GEP1:%.*]] = getelementptr inbounds %T019copy_value_destroy_B03FooV, %T019copy_value_destroy_B03FooV* %0, i32 0, i32 2
// CHECK: [[VAL1:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP1]], align 8
// CHECK: [[GEP2:%.*]] = getelementptr inbounds %T019copy_value_destroy_B03FooV, %T019copy_value_destroy_B03FooV* %0, i32 0, i32 5
// CHECK: [[VAL2:%.*]] = load %swift.refcounted*, %swift.refcounted** [[GEP2]], align 8
// CHECK: call void @swift_rt_swift_retain(%swift.refcounted* [[VAL1]])
// CHECK: call void @swift_rt_swift_retain(%swift.refcounted* [[VAL2]])
// CHECK: call void @swift_rt_swift_release(%swift.refcounted* [[VAL1]])
// CHECK: call void @swift_rt_swift_release(%swift.refcounted* [[VAL2]])
sil @non_trivial : $@convention(thin) (Foo) -> () {
bb0(%0 : $Foo):
  %1 = copy_value %0 : $Foo
  destroy_value %1 : $Foo
  %2 = tuple()
  return %2 : $()
}
