// RUN: %target-parse-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
