mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
163 lines
6.5 KiB
Swift
163 lines
6.5 KiB
Swift
// RUN: %target-typecheck-verify-swift -enable-experimental-feature Extern -disable-availability-checking
|
|
|
|
// REQUIRES: swift_feature_Extern
|
|
|
|
@_extern(wasm, module: "m1", name: "f1")
|
|
func f1(x: Int) -> Int
|
|
|
|
@_extern(wasm, module: "m2", name: ) // expected-error {{expected string literal in '_extern' attribute}}
|
|
func f2ErrorOnMissingNameLiteral(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module: "m3", name) // expected-error {{expected ':' after label 'name'}}
|
|
func f3ErrorOnMissingNameColon(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module: "m4",) // expected-error {{expected name argument to '@_extern'}}
|
|
func f4ErrorOnMissingNameLabel(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module: "m5") // expected-error {{expected ',' in '_extern' attribute}}
|
|
func f5ErrorOnMissingName(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module: ) // expected-error {{expected string literal in '_extern' attribute}} expected-error {{expected ',' in '_extern' attribute}}
|
|
func f6ErrorOnMissingModuleLiteral(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module) // expected-error {{expected ':' after label 'module'}} expected-error {{expected ',' in '_extern' attribute}}
|
|
func f7ErrorOnMissingModuleColon(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm,) // expected-error {{expected module argument to '@_extern'}} expected-error {{expected ',' in '_extern' attribute}}
|
|
func f8ErrorOnMissingModuleLabel(x: Int) -> Int // expected-error{{expected '{' in body of function declaration}}
|
|
|
|
@_extern(wasm, module: "m9", name: "f9")
|
|
func f9WithBody() {} // expected-error {{unexpected body of function declaration}}
|
|
|
|
struct S {
|
|
@_extern(wasm, module: "m10", name: "f10") // expected-error {{'@_extern' can only be applied to globals}}
|
|
func f10Member()
|
|
}
|
|
|
|
func f11Scope() {
|
|
@_extern(wasm, module: "m11", name: "f11") // expected-error{{'@_extern' can only be applied to globals}}
|
|
func f11Inner()
|
|
}
|
|
|
|
@_extern(invalid, module: "m12", name: "f12") // expected-error {{expected '_extern' option such as 'c'}}
|
|
func f12InvalidLang() // expected-error {{expected '{' in body of function declaration}}
|
|
|
|
@_extern(c, "valid")
|
|
func externCValid()
|
|
|
|
@_extern(c, "_start_with_underscore")
|
|
func underscoredValid()
|
|
|
|
@_extern(c, "") // expected-error {{expected non-empty C name in '@_extern'}}
|
|
func emptyCName()
|
|
|
|
// Allow specifying any identifier explicitly
|
|
@_extern(c, "0start_with_digit")
|
|
func explicitDigitPrefixed()
|
|
|
|
@_extern(c) // expected-warning {{C name '+' may be invalid; explicitly specify the name in '@_extern(c)' to suppress this warning}}
|
|
func +(a: Int, b: Bool) -> Bool
|
|
|
|
@_extern(c) // expected-warning {{C name '🥸_implicitInvalid' may be invalid; explicitly specify the name in '@_extern(c)' to suppress this warning}}
|
|
func 🥸_implicitInvalid()
|
|
|
|
@_extern(c)
|
|
func omitCName()
|
|
|
|
@_extern(c, ) // expected-error {{expected string literal in '_extern' attribute}}
|
|
func editingCName() // expected-error {{expected '{' in body of function declaration}}
|
|
|
|
struct StructScopeC {
|
|
@_extern(c, "member_decl") // expected-error {{'@_extern' can only be applied to globals}}
|
|
func memberDecl()
|
|
|
|
@_extern(c, "static_member_decl")
|
|
static func staticMemberDecl()
|
|
|
|
@_extern(c, "global_static_variable")
|
|
static var globalVariable: Int
|
|
}
|
|
|
|
struct GenericStruct<T> {
|
|
@_extern(c, "static_member_decl") // expected-error{{'@_extern' can only be applied to globals}}
|
|
static func genericStaticMemberDecl()
|
|
}
|
|
|
|
func funcScopeC() {
|
|
@_extern(c, "func_scope_inner") // expected-error {{'@_extern' can only be applied to globals}}
|
|
func inner()
|
|
}
|
|
|
|
@_extern(c, "c_value")
|
|
var nonFunc: Int = 0 // expected-error{{'@_extern' variable cannot have an initializer}}
|
|
|
|
@_extern(c, "with_body")
|
|
func withInvalidBody() {} // expected-error {{unexpected body of function declaration}}
|
|
|
|
@_extern(c, "duplicate_attr_c_1")
|
|
@_extern(c, "duplicate_attr_c_2") // expected-error {{duplicate attribute}}
|
|
func duplicateAttrsC()
|
|
|
|
@_extern(wasm, module: "dup", name: "duplicate_attr_wasm_1")
|
|
@_extern(wasm, module: "dup", name: "duplicate_attr_wasm_2") // expected-error {{duplicate attribute}}
|
|
func duplicateAttrsWasm()
|
|
|
|
@_extern(c, "mixed_attr_c")
|
|
@_extern(wasm, module: "mixed", name: "mixed_attr_wasm")
|
|
func mixedAttrs_C_Wasm()
|
|
|
|
class NonC {}
|
|
@_extern(c)
|
|
func nonCReturnTypes() -> NonC // expected-error {{'NonC' cannot be represented in C}}
|
|
// @_extern(wasm) have no interface limitation
|
|
@_extern(wasm, module: "non-c", name: "return_wasm")
|
|
func nonCReturnTypesWasm() -> NonC
|
|
@_extern(c)
|
|
@_extern(wasm, module: "non-c", name: "return_mixed")
|
|
func nonCReturnTypesMixed() -> NonC // expected-error {{'NonC' cannot be represented in C}}
|
|
|
|
@_extern(c)
|
|
func nonCParamTypes(_: Int, _: NonC) // expected-error {{'NonC' cannot be represented in C}}
|
|
@_extern(wasm, module: "non-c", name: "param_wasm")
|
|
func nonCParamTypesWasm(_: Int, _: NonC)
|
|
|
|
@_extern(c)
|
|
@_extern(wasm, module: "non-c", name: "param_mixed")
|
|
func nonCParamTypesMixed(_: Int, _: NonC) // expected-error {{'NonC' cannot be represented in C}}
|
|
|
|
@_extern(c)
|
|
func defaultArgValue_C(_: Int = 42)
|
|
|
|
@_extern(wasm, module: "", name: "")
|
|
func defaultArgValue_Wasm(_: Int = 24)
|
|
|
|
@_extern(c)
|
|
func asyncFuncC() async // expected-error {{async functions cannot be represented in C}}
|
|
|
|
@_extern(c)
|
|
func throwsFuncC() throws // expected-error {{raising errors from C functions is not supported}}
|
|
|
|
@_extern(c)
|
|
func genericFuncC<T>(_: T) // expected-error {{'T' cannot be represented in C}}
|
|
|
|
@_extern(c) // expected-error {{'@_extern' cannot be applied to an @_cdecl declaration}}
|
|
@_cdecl("another_c_name")
|
|
func withAtCDecl_C()
|
|
|
|
@_extern(wasm, module: "", name: "") // expected-error {{'@_extern' cannot be applied to an @_cdecl declaration}}
|
|
@_cdecl("another_c_name")
|
|
func withAtCDecl_Wasm()
|
|
|
|
@_extern(c) // expected-error {{'@_extern' cannot be applied to an @_silgen_name declaration}}
|
|
@_silgen_name("another_sil_name")
|
|
func withAtSILGenName_C()
|
|
|
|
@_extern(wasm, module: "", name: "") // expected-error {{'@_extern' cannot be applied to an @_silgen_name declaration}}
|
|
@_silgen_name("another_sil_name")
|
|
func withAtSILGenName_Wasm()
|
|
|
|
@_extern(c) // expected-error {{'@_extern' cannot be applied to an @_silgen_name declaration}} expected-error {{'@_extern' cannot be applied to an @_cdecl declaration}}
|
|
@_cdecl("another_c_name")
|
|
@_silgen_name("another_sil_name")
|
|
func withAtSILGenName_CDecl_C()
|