// swift-tools-version: 4.0
// swift-module-flags: 

// RUN: %empty-directory(%t)
// RUN: %target-swift-frontend -emit-module-path %t/Conformances.swiftmodule -enable-resilience -emit-sil -o %t/Conformances.sil -enable-objc-interop -disable-objc-attr-requires-foundation-module %s
// RUN: %FileCheck -check-prefix CHECK-MODULE %s < %t/Conformances.sil
// RUN: %FileCheck -check-prefix NEGATIVE-MODULE %s < %t/Conformances.sil
// RUN: %target-swift-frontend -enable-objc-interop -emit-sil -I %t %S/Inputs/ConformancesUser.swift -O | %FileCheck %s

public protocol MyProto {
  init()
  func method()
  var prop: Int { get set }
  subscript(index: Int) -> Int { get set }
}
extension MyProto {
  public func method() {}
}

// Make sure there's no default witness table. (But also make sure we printed at
// least some regular witness tables, or we'll have to change the test.)
// CHECK-MODULE: sil_witness_table{{.+}}: MyProto module Conformances
// NEGATIVE-MODULE-NOT: sil_default_witness_table{{.+}}MyProto


@_fixed_layout // allow conformance devirtualization
public struct FullStructImpl: MyProto {
  public init()
  public func method()
  public var prop: Int { get set }
  public subscript(index: Int) -> Int { get set }
}
// CHECK-LABEL: sil @$s16ConformancesUser8testFullSiyF
// CHECK: function_ref @$s12Conformances14FullStructImplVACycfC
// CHECK: function_ref @$s12Conformances14FullStructImplV6methodyyF
// CHECK: function_ref @$s12Conformances14FullStructImplV4propSivs
// CHECK: function_ref @$s12Conformances14FullStructImplVyS2icig
// CHECK: end sil function '$s16ConformancesUser8testFullSiyF'

@_fixed_layout // allow conformance devirtualization
public struct OpaqueStructImpl: MyProto {}

// CHECK-LABEL: sil @$s16ConformancesUser10testOpaqueSiyF
// CHECK: function_ref @$s12Conformances7MyProtoPxycfC
// Note the default implementation is filled in here.
// CHECK: function_ref @$s12Conformances7MyProtoPAAE6methodyyF
// CHECK: function_ref @$s12Conformances7MyProtoP4propSivs
// CHECK: function_ref @$s12Conformances7MyProtoPyS2icig
// CHECK: end sil function '$s16ConformancesUser10testOpaqueSiyF'


@objc public protocol OptionalReqs {
  @objc optional func method()
}
@_fixed_layout
public final class OptionalReqsPresent: OptionalReqs {
  public func method () {}
}
@_fixed_layout
public final class OptionalReqsAbsent: OptionalReqs {}

// It would be okay if this one got optimized...
// CHECK-LABEL: sil @$s16ConformancesUser19testOptionalPresentySb0A00d4ReqsE0CF
// CHECK: dynamic_method_br %0 : $OptionalReqsPresent, #OptionalReqs.method!1.foreign
// CHECK: end sil function '$s16ConformancesUser19testOptionalPresentySb0A00d4ReqsE0CF'

// ...but not this one, because the method that's currently absent might get added.
// CHECK-LABEL: sil @$s16ConformancesUser18testOptionalAbsentySb0A00d4ReqsE0CF
// CHECK: dynamic_method_br %0 : $OptionalReqsAbsent, #OptionalReqs.method!1.foreign
// CHECK: end sil function '$s16ConformancesUser18testOptionalAbsentySb0A00d4ReqsE0CF'
