// RUN: %target-swift-frontend -assume-parsing-unqualified-ownership-sil %s -emit-ir | %FileCheck %s

// REQUIRES: CPU=x86_64

import Swift

// CHECK-LABEL: @_T018field_type_vectors3FooVMn = hidden constant
// CHECK:         %swift.type** (%swift.type*)* [[FOO_TYPES_ACCESSOR:@[A-Za-z0-9_]*]]
struct Foo {
  var x: Int
}

// CHECK-LABEL: @_T018field_type_vectors3BarVMn = hidden constant
// CHECK:         %swift.type** (%swift.type*)* [[BAR_TYPES_ACCESSOR:@[A-Za-z0-9_]*]]
// CHECK-LABEL: @_T018field_type_vectors3BarVMP = internal global
// -- There should be 5 words between the address point and the field type
//    vector slot, with type %swift.type**
// CHECK:         i64, i64, i64, i64, %swift.type*, %swift.type**
struct Bar<T> {
  var y: Int
}

// CHECK-LABEL: @_T018field_type_vectors3BasVMn = hidden constant
// CHECK:         %swift.type** (%swift.type*)* [[BAS_TYPES_ACCESSOR:@[A-Za-z0-9_]*]]
// CHECK-LABEL: @_T018field_type_vectors3BasVMP = internal global
// -- There should be 7 words between the address point and the field type
//    vector slot, with type %swift.type**
// CHECK:         i64, i64, i64, i64, i64, %swift.type*, %swift.type*, %swift.type**
struct Bas<T, U> {
  var foo: Foo
  var bar: Bar<T>
}

// CHECK-LABEL: @_T018field_type_vectors3ZimCMn = hidden constant
// CHECK:         %swift.type** (%swift.type*)* [[ZIM_TYPES_ACCESSOR:@[A-Za-z0-9_]*]]
// CHECK-LABEL: @_T018field_type_vectors3ZimCMP = internal global
// -- There should be 14 words between the address point and the field type
//    vector slot, with type %swift.type**
// CHECK:         i64, %swift.type*, %swift.opaque*, %swift.opaque*, i64, i32, i32, i32, i16, i16, i32, i32, i64, i8*, %swift.type*, %swift.type*, i8*, i64, i64, i64, %swift.type**
class Zim<T, U> {
  var foo: Foo?
  var bar: Bar<T>?
  var bas: Bas<T, U>?
}
sil_vtable Zim {}

sil @_TFC18field_type_vectors3ZimcU___fMGS0_Q_Q0__FT_GS0_Q_Q0__ : $@convention(method) <T, U> (@owned Zim<T, U>) -> @owned Zim<T, U>

// CHECK-LABEL: @_T018field_type_vectors4ZangCMn = hidden constant
// CHECK:         %swift.type** (%swift.type*)* [[ZANG_TYPES_ACCESSOR:@[A-Za-z0-9_]*]]
// CHECK-LABEL: @_T018field_type_vectors4ZangCMP = internal global
// -- There should be 16 words between the address point and the field type
//    vector slot, with type %swift.type**
// CHECK:         i64, %swift.type*, %swift.opaque*, %swift.opaque*, i64, i32, i32, i32, i16, i16, i32, i32, i64, i8*, %swift.type*, %swift.type*, i8*, i64, i64, i64, %swift.type*, i64, %swift.type**
class Zang<V>: Zim<V, V> {
  var zung: Int = 0
}
sil_vtable Zang {}

sil @_TFC18field_type_vectors4ZangcU__fMGS0_Q__FT_GS0_Q__ : $@convention(method) <V> (@owned Zang<V>) -> @owned Zang<V>

// -- For storage-qualified fields, we just report the formal type.
class StorageQualified {
  unowned var a: StorageQualified
  weak var b: StorageQualified?

  init(x: StorageQualified) {
    a = x
    b = x
  }
}
sil_vtable StorageQualified {}

// CHECK:       [[FOO_TYPE_VECTOR_SLOT:@.*Foo.*]] = private global %swift.type** null

// CHECK: define{{( protected)?}} private %swift.type** [[FOO_TYPES_ACCESSOR]](%swift.type* %Foo)
// CHECK:   [[EXISTING:%.*]] = load %swift.type**, %swift.type*** [[FOO_TYPE_VECTOR_SLOT]]
// CHECK:   [[IS_NULL:%.*]] = icmp eq %swift.type** [[EXISTING]], null
// CHECK:   br i1 [[IS_NULL]], label %[[BUILD_FIELD_TYPES:.*]], label %[[DONE:.*]]
// CHECK: [[BUILD_FIELD_TYPES]]:
// CHECK:   store {{.*}} @_T0SiN
// CHECK:   cmpxchg {{.*}} [[FOO_TYPE_VECTOR_SLOT]]

// CHECK: define{{( protected)?}} private %swift.type** [[BAR_TYPES_ACCESSOR]](%swift.type* %"Bar<T>")
// CHECK:   [[T0:%.*]] = bitcast %swift.type* %"Bar<T>" to %swift.type***
// -- 5 words between the address point and the slot
// CHECK:   [[SLOT:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], i32 5
// CHECK:   load %swift.type**, %swift.type*** [[SLOT]], align 8
// CHECK:   br
// CHECK-NOT: load %swift.type*,
// CHECK:   store {{.*}} @_T0SiN


// CHECK: define{{( protected)?}} private %swift.type** [[BAS_TYPES_ACCESSOR]](%swift.type* %"Bas<T, U>")
// CHECK:   [[T0:%.*]] = bitcast %swift.type* %"Bas<T, U>" to %swift.type***
// -- 7 words between the address point and the slot
// CHECK:   [[SLOT:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], i32 7
// CHECK:   load %swift.type**, %swift.type*** [[SLOT]], align 8
// CHECK:   br
// CHECK:   store {{.*}} @_T018field_type_vectors3FooVMf
// CHECK:   call %swift.type* @_T018field_type_vectors3BarVMa(%swift.type* %T)

// CHECK: define{{( protected)?}} private %swift.type** [[ZIM_TYPES_ACCESSOR]](%swift.type* %"Zim<T, U>")
// CHECK:   [[T0:%.*]] = bitcast %swift.type* %"Zim<T, U>" to %swift.type***
// -- 14 words between the address point and the slot
// CHECK:   [[SLOT:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], i32 16
// CHECK:   load %swift.type**, %swift.type*** [[SLOT]], align 8

// CHECK: define{{( protected)?}} private %swift.type** [[ZANG_TYPES_ACCESSOR]](%swift.type* %"Zang<V>")
// CHECK:   [[T0:%.*]] = bitcast %swift.type* %"Zang<V>" to %swift.type***
// -- 16 words between the address point and the slot
// CHECK:   [[SLOT:%.*]] = getelementptr inbounds %swift.type**, %swift.type*** [[T0]], i32 18
// CHECK:   load %swift.type**, %swift.type*** [[SLOT]], align 8

