// RUN: %empty-directory(%t)
// RUN: %swift -c -primary-file %s -enable-large-loadable-types -Xllvm -sil-print-after=loadable-address -sil-verify-all -o %t/big_types_generic.o 2>&1 | %FileCheck %s

struct Big<T> {
  var a0 : T
  var a1 : T
  var a2 : T
  var a3 : T
  var a4 : T
  var a5 : T
  var a6 : T
  var a7 : T
  var a8 : T
  init(_ t: T) {
    a0 = t
    a1 = t
    a2 = t
    a3 = t
    a4 = t
    a5 = t
    a6 = t
    a7 = t
    a8 = t
  }
}

// CHECK-LABEL: sil hidden @$s17big_types_generic10nonGenericAA3BigVys5Int32VG_AGt_AGyctSgyF : $@convention(thin) () -> @out Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>
// CHECK: bb0(%0 : $*Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>):
// CHECK: [[ENUMCONSTRUCT:%.*]] = enum $Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>, #Optional.none!enumelt
// CHECK: store [[ENUMCONSTRUCT]] to %0 : $*Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>
// CHECK: return %{{.*}} : $()
// CHECK-LABEL: } // end sil function '$s17big_types_generic10nonGenericAA3BigVys5Int32VG_AGt_AGyctSgyF'
func nonGeneric() -> ((Big<Int32>, Big<Int32>), () -> Big<Int32>)? {
  return nil
}

// CHECK-LABEL: sil hidden @$s17big_types_generic11nonGeneric2AA3BigVys5Int32VG_AGt_AGyctyF : $@convention(thin) () -> (Big<Int32>, Big<Int32>, @owned @callee_guaranteed () -> @out Big<Int32>)
// CHECK: bb0:
// CHECK: [[TUPLECONSTRUCT:%.*]] = tuple (%{{.*}} : $Big<Int32>, %{{.*}} : $Big<Int32>, %{{.*}} : $@callee_guaranteed () -> @out Big<Int32>)
// CHECK: return [[TUPLECONSTRUCT]]
// CHECK-LABEL: } // end sil function '$s17big_types_generic11nonGeneric2AA3BigVys5Int32VG_AGt_AGyctyF'
func nonGeneric2() -> ((Big<Int32>, Big<Int32>), () -> Big<Int32>) {
  return ((Big(1), Big(2)), { return Big(1) })
}

func generic<T>(_ t: T) -> ((Big<T>, Big<T>), () -> Big<T>)? {
  return nil
}

func generic2<T>(_ t: T) -> ((Big<T>, Big<T>), () -> Big<T>) {
  return ((Big(t), Big(t)), { return Big(t) })
}

// CHECK-LABEL: sil hidden @$s17big_types_generic8useStuffyyF : $@convention(thin) () -> ()
// CHECK: switch_enum_addr %{{.*}} : $*Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>, case #Optional.some!enumelt.1
// CHECK: switch_enum_addr %{{.*}} : $*Optional<((Big<Int32>, Big<Int32>), @callee_guaranteed () -> @out Big<Int32>)>, case #Optional.some!enumelt.1
// CHECK: switch_enum %{{.*}} : $Optional<((Big<Int>, Big<Int>), @callee_guaranteed () -> @out Big<Int>)>, case #Optional.some!enumelt.1
// CHECK: return %{{.*}} : $()
// CHECK-LABEL: } // end sil function '$s17big_types_generic8useStuffyyF'
func useStuff() {
  print(nonGeneric()!.0)
  print(nonGeneric()!.1)
  print(nonGeneric2().0)
  print(nonGeneric2().1)
  print(generic(1)!.0.0)
  print(generic(1)!.1)
  print(generic2(1).0)
  print(generic2(1).1)
}
