// RUN: %target-sil-nm %s | %FileCheck -check-prefix=SIL-NM -check-prefix=CHECK %s
// RUN: %target-sil-nm -demangle %s | %FileCheck -check-prefix=DEMANGLE %s
// RUN: %empty-directory(%t)
// RUN: %target-sil-opt -module-name main -emit-sib -o %t/out.sib %s
// RUN: %target-sil-nm -module-name main %t/out.sib | %FileCheck %s
// RUN: %target-sil-nm -module-name main -demangle %t/out.sib | %FileCheck -check-prefix=DEMANGLE %s

import Builtin

public class C {
  deinit
  init()
}

struct ConformingGenericStruct<T> : ResilientProtocol {
  func defaultA()
}

public protocol ResilientProtocol {
  func defaultA()
}

// CHECK: F c_deinit
sil [serialized] @c_deinit : $@convention(method) (@owned C) -> () {
bb0(%0 : $C):
  %1 = tuple()
  return %1 : $()
}

// CHECK: F defaultA
sil [serialized] @defaultA : $@convention(witness_method: ResilientProtocol) <Self where Self : ResilientProtocol> (@in_guaranteed Self) -> () {
bb0(%0 : $*Self):
  %result = tuple ()
  return %result : $()
}

// CHECK: F f1
sil [serialized] @f1 : $@convention(thin) () -> () {
bb0:
  %0 = tuple()
  return %0 : $()
}

// CHECK: F globalinit
sil [serialized] @globalinit : $@convention(thin) () -> () {
bb0:
  %0 = tuple()
  return %0 : $()
}

// CHECK: G global_var
sil_global [serialized] @global_var : $Builtin.Int32

// CHECK: W $s4main23ConformingGenericStructVyxGAA17ResilientProtocolAAWP
// DEMANGLE: W protocol witness table for main.ConformingGenericStruct<A> : main.ResilientProtocol in main
sil_witness_table [serialized] <T> ConformingGenericStruct<T> : ResilientProtocol module protocol_resilience {
  method #ResilientProtocol.defaultA!1: @defaultA
}

// vtables cannot be serialized from SIL.
// SIL-NM: V C
sil_vtable [serialized] C {
  #C.deinit!deallocator.1: @c_deinit
}


