// RUN: %target-typecheck-verify-swift

@_cdecl("cdecl_foo") func foo(x: Int) -> Int { return x }

@_cdecl("") // expected-error{{symbol name cannot be empty}}
func emptyName(x: Int) -> Int { return x }

@_cdecl("noBody")
func noBody(x: Int) -> Int // expected-error{{expected '{' in body of function}}

@_cdecl("property") // expected-error{{may only be used on 'func' declarations}}
var property: Int

var computed: Int {
  @_cdecl("get_computed") get { return 0 }
  @_cdecl("set_computed") set { return }
}

struct SwiftStruct { var x, y: Int }
enum SwiftEnum { case A, B }
@objc enum CEnum: Int { case A, B }

@_cdecl("swiftStruct")
func swiftStruct(x: SwiftStruct) {} // expected-error{{cannot be represented}} expected-note{{Swift struct}}

@_cdecl("swiftEnum")
func swiftEnum(x: SwiftEnum) {} // expected-error{{cannot be represented}} expected-note{{non-'@objc' enum}}

@_cdecl("cEnum")
func cEnum(x: CEnum) {}

class Foo {
  @_cdecl("Foo_foo") // expected-error{{can only be applied to global functions}}
  func foo(x: Int) -> Int { return x }

  @_cdecl("Foo_foo_2") // expected-error{{can only be applied to global functions}}
  static func foo(x: Int) -> Int { return x }

  @_cdecl("Foo_init") // expected-error{{may only be used on 'func'}}
  init() {}

  @_cdecl("Foo_deinit") // expected-error{{may only be used on 'func'}}
  deinit {}
}

func hasNested() {
  @_cdecl("nested") // expected-error{{can only be used in a non-local scope}}
  func nested() { }
}

// TODO: Handle error conventions in SILGen for toplevel functions.
@_cdecl("throwing") // expected-error{{raising errors from @_cdecl functions is not supported}}
func throwing() throws { }

// TODO: cdecl name collisions
