| // 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 |