// RUN: %target-swift-frontend -parse-as-library -module-name=test -O %s -emit-ir > %t.ll
// RUN: %FileCheck %s < %t.ll
// RUN: %FileCheck -check-prefix=CHECK-DEAD %s < %t.ll

// protocol descriptor for test.Proto
// CHECK-DAG: @_T04test5ProtoMp =
// CHECK-DAG: @_T04test12PrivateProto{{[_A-Z0-9]*}}Mp =

// reflection metadata field descriptors
// CHECK-DAG: @_T04test7StructAVMF =
// CHECK-DAG: @_T04test7StructBVMF =
// CHECK-DAG: @_T04test7StructCVMF =
// CHECK-DAG: @_T04test7StructDVMF =
// CHECK-DAG: @_T04test7StructEVMF =

// value witness tables
// CHECK-DAG: @_T04test7StructAVWV =
// CHECK-DAG: @_T04test7StructBVWV =
// CHECK-DAG: @_T04test7StructCVWV =
// CHECK-DEAD-NOT: @_T04test7StructDVWV
// CHECK-DAG: @_T04test7StructEVWV =

// nominal type descriptors
// CHECK-DAG: @_T04test7StructAVMn =
// CHECK-DAG: @_T04test7StructBVMn =
// CHECK-DAG: @_T04test7StructCVMn =
// CHECK-DEAD-NOT: @_T04test7StructDVMn
// CHECK-DAG: @_T04test7StructEVMn =

// full type metadata
// CHECK-DAG: @_T04test7StructAVMf =
// CHECK-DAG: @_T04test7StructBVMf =
// CHECK-DAG: @_T04test7StructCVMf =
// CHECK-DEAD-NOT: @_T04test7StructDVMf
// CHECK-DAG: @_T04test7StructEVMf =

// protocol witness tables
// CHECK-DAG: @_T04test7StructAVAA5ProtoAAWP =
// CHECK-DAG: @_T04test7StructBVAA5ProtoAAWP =
// CHECK-DAG: @_T04test7StructCVAA5ProtoAAWP =
// CHECK-DEAD-NOT: @_T04test7StructDVAA5ProtoAAWP =
// CHECK-DAG: @_T04test7StructEVAA12PrivateProto{{[_A-Z0-9]*}}AAWP =

public protocol Proto {
  func abc()
}

struct StructA : Proto {
  func abc() {
  }
}

struct StructB : Proto {
  func abc() {
  }
}

struct StructC : Proto {
  func abc() {
  }
}

// This is the only struct for which no metadata and conformances are needed.
struct StructD : Proto {
  func abc() {
  }
}

private protocol PrivateProto {
  func xyz()
}

public struct StructE : PrivateProto {
  func xyz() {
  }
}

public func needPrivateConformance(_ x: Any) -> Bool {
  return x is PrivateProto
}

@inline(never)
@_semantics("optimize.sil.never")
func consume1<T>(_ t: T) {
}

@inline(never)
@_semantics("optimize.sil.never")
func consume2<T: Proto>(_ t: T) {
  t.abc()
}
@inline(never)
@_semantics("optimize.sil.never")
func consume3(_ p: Proto) {
  p.abc()
}
@inline(never)
@_semantics("optimize.sil.never")
func consume4(_ t: StructD) {
  t.abc()
}

var a = StructA()
var b = StructB()
var c = StructC()
var d = StructD()

public func callfuncA() {
  consume1(a)
}

public func callfuncB() {
  consume2(b)
}

public func callfuncC() {
  consume3(c)
}

public func callfuncD() {
  consume4(d)
}

