mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This is like '@inlinable', except that the symbol does not have a public entry point in the generated binary at all; it is deserialized and a copy is always emitted into the client binary, with shared linkage. Just like '@inlinable', if you apply this to an internal declaration it becomes '@usableFromInline' automatically. This uses the same mechanism as default arguments ever since Swift 4, so it should work reasonably well, but there are rough edges with diagnostics and such. Don't use this if you are not the standard library. Fixes <rdar://problem/33767512>, <https://bugs.swift.org/browse/SR-5646>.
18 lines
1.1 KiB
Swift
18 lines
1.1 KiB
Swift
// RUN: %target-typecheck-verify-swift
|
|
|
|
private func privateFunction() {}
|
|
// expected-note@-1{{global function 'privateFunction()' is not '@usableFromInline' or public}}
|
|
fileprivate func fileprivateFunction() {}
|
|
// expected-note@-1{{global function 'fileprivateFunction()' is not '@usableFromInline' or public}}
|
|
func internalFunction() {}
|
|
// expected-note@-1{{global function 'internalFunction()' is not '@usableFromInline' or public}}
|
|
@usableFromInline func versionedFunction() {}
|
|
public func publicFunction() {}
|
|
|
|
@_alwaysEmitIntoClient public func alwaysEmitIntoClientFunction() {
|
|
privateFunction() // expected-error {{global function 'privateFunction()' is private and cannot be referenced from an '@_alwaysEmitIntoClient' function}}
|
|
fileprivateFunction() // expected-error {{global function 'fileprivateFunction()' is fileprivate and cannot be referenced from an '@_alwaysEmitIntoClient' function}}
|
|
internalFunction() // expected-error {{global function 'internalFunction()' is internal and cannot be referenced from an '@_alwaysEmitIntoClient' function}}
|
|
versionedFunction()
|
|
publicFunction()
|
|
} |