// RUN: %target-swift-frontend -module-name=test -Onone -emit-ir %s | %FileCheck %s

// CHECK-DAG: define linkonce_odr hidden swiftcc void @shared_external_test()
// CHECK-DAG: declare {{(dllimport )?}}swiftcc void @public_external_test()
// Non-public external symbols are emitted into clients.
// CHECK-DAG: define available_externally hidden swiftcc void @hidden_external_test()
// CHECK-NOT: public_external_unused_test


sil public_external @public_external_test : $@convention(thin)  () -> () {
  %0 = tuple()
  return %0 : $()
}

sil hidden_external @hidden_external_test : $@convention(thin)  () -> () {
  %0 = tuple()
  return %0 : $()
}

sil shared_external @shared_external_test : $@convention(thin)  () -> () {
  %0 = tuple()
  return %0 : $()
}

sil public_external @public_external_unused_test : $@convention(thin)  () -> () {
  %0 = tuple()
  return %0 : $()
}

sil public @use_all_symbols : $@convention(thin)  () -> () {
  %0 = function_ref @public_external_test : $@convention(thin)  () -> ()
  %1 = function_ref @hidden_external_test : $@convention(thin)  () -> ()
  %2 = function_ref @shared_external_test : $@convention(thin)  () -> ()

  apply %0() : $@convention(thin)  () -> ()
  apply %1() : $@convention(thin)  () -> ()
  apply %2() : $@convention(thin)  () -> ()

  %24 = tuple()
  return %24 : $()
}

