// RUN: %target-swift-frontend %s -swift-version 4 -emit-ir -enforce-exclusivity=checked | %FileCheck --check-prefix=CHECK --check-prefix=CHECK-%target-cpu %s

sil_stage canonical

import Swift

class A {
   @_hasStorage final var x: Int { get set }
   init(x: Int)
}
sil_vtable A {}

sil public_external @changeInt : $@convention(thin) (@inout Int) -> ()

// CHECK-LABEL: define {{.*}} @test1(
sil @test1 : $@convention(thin) (@owned A) -> Int {
bb0(%0 : $A):
  // CHECK: [[SCRATCH0:%.*]] = alloca [[BUFFER_T:\[.* x i8\]]],
  // CHECK: [[SCRATCH1:%.*]] = alloca [[BUFFER_T:\[.* x i8\]]],

  // CHECK: [[PROP:%.*]] = getelementptr inbounds [[C:%T11exclusivity1AC]], %T11exclusivity1AC* %0, i32 0, i32 1
  %3 = ref_element_addr %0 : $A, #A.x

  // CHECK: [[T0:%.*]] = bitcast [[BUFFER_T]]* [[SCRATCH0]] to i8*
  // CHECK: call void @llvm.lifetime.start.p0i8(i64 -1, i8* [[T0]])
  // CHECK: [[T0:%.*]] = bitcast [[INT:%TSi]]* [[PROP]] to i8*
  // CHECK: call void @swift_beginAccess(i8* [[T0]], [[BUFFER_T]]* [[SCRATCH0]], [[SIZE_T:i32|i64]] 32, i8* null)
  %4 = begin_access [read] [dynamic] %3 : $*Int

  // CHECK: [[T0:%.*]] = getelementptr inbounds [[INT]], [[INT]]* %1, i32 0, i32 0
  // CHECK: load {{.*}}* [[T0]]
  %5 = load %4 : $*Int

  // CHECK: call void @swift_endAccess([[BUFFER_T]]* [[SCRATCH0]])
  // CHECK: [[T0:%.*]] = bitcast [[BUFFER_T]]* [[SCRATCH0]] to i8*
  // CHECK: call void @llvm.lifetime.end.p0i8(i64 -1, i8* [[T0]])
  end_access %4 : $*Int

  %9 = function_ref @changeInt : $@convention(thin) (@inout Int) -> ()

  // CHECK: [[PROP:%.*]] = getelementptr inbounds [[C:%T11exclusivity1AC]], %T11exclusivity1AC* %0, i32 0, i32 1
  %11 = ref_element_addr %0 : $A, #A.x

  // CHECK: [[T0:%.*]] = bitcast [[BUFFER_T]]* [[SCRATCH1]] to i8*
  // CHECK: call void @llvm.lifetime.start.p0i8(i64 -1, i8* [[T0]])
  // CHECK: [[T0:%.*]] = bitcast [[INT:%TSi]]* [[PROP]] to i8*
  // CHECK: call void @swift_beginAccess(i8* [[T0]], [[BUFFER_T]]* [[SCRATCH1]], [[SIZE_T:i32|i64]] 33, i8* null)
  %12 = begin_access [modify] [dynamic] %11 : $*Int

  // CHECK: call {{.*}} @changeInt([[INT]]*{{.*}} [[PROP]])
  %13 = apply %9(%12) : $@convention(thin) (@inout Int) -> ()

  // CHECK: call void @swift_endAccess([[BUFFER_T]]* [[SCRATCH1]])
  // CHECK: [[T0:%.*]] = bitcast [[BUFFER_T]]* [[SCRATCH1]] to i8*
  // CHECK: call void @llvm.lifetime.end.p0i8(i64 -1, i8* [[T0]])
  end_access %12 : $*Int
  strong_release %0 : $A
  return %5 : $Int
}
