mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The main point of this change is to make sure that a shared function always has a body: both, in the optimizer pipeline and in the swiftmodule file. This is important because the compiler always needs to emit code for a shared function. Shared functions cannot be referenced from outside the module. In several corner cases we missed to maintain this invariant which resulted in unresolved-symbol linker errors. As side-effect of this change we can drop the shared_external SIL linkage and the IsSerializable flag, which simplifies the serialization and linkage concept.
44 lines
1.4 KiB
Swift
44 lines
1.4 KiB
Swift
// RUN: %target-swift-emit-silgen %s | %FileCheck %s
|
|
|
|
// CHECK-LABEL: sil hidden [thunk] [ossa] @pear : $@convention(c)
|
|
// CHECK: function_ref @$s5cdecl5apple{{[_0-9a-zA-Z]*}}F
|
|
// CHECK-LABEL: sil hidden [ossa] @$s5cdecl5apple{{[_0-9a-zA-Z]*}}F
|
|
@_cdecl("pear")
|
|
func apple(_ f: @convention(c) (Int) -> Int) {
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [ossa] @$s5cdecl16forceCEntryPoint{{[_0-9a-zA-Z]*}}F
|
|
// CHECK: function_ref @grapefruit
|
|
func forceCEntryPoint() {
|
|
apple(orange)
|
|
}
|
|
|
|
// CHECK-LABEL: sil hidden [thunk] [ossa] @grapefruit : $@convention(c)
|
|
// CHECK: function_ref @$s5cdecl6orange{{[_0-9a-zA-Z]*}}F
|
|
// CHECK-LABEL: sil hidden [ossa] @$s5cdecl6orange{{[_0-9a-zA-Z]*}}F
|
|
@_cdecl("grapefruit")
|
|
func orange(_ x: Int) -> Int {
|
|
return x
|
|
}
|
|
|
|
// CHECK-LABEL: sil [serialized] [thunk] [ossa] @cauliflower : $@convention(c)
|
|
// CHECK: function_ref @$s5cdecl8broccoli{{[_0-9a-zA-Z]*}}F
|
|
// CHECK-LABEL: sil [ossa] @$s5cdecl8broccoli{{[_0-9a-zA-Z]*}}F
|
|
@_cdecl("cauliflower")
|
|
public func broccoli(_ x: Int) -> Int {
|
|
return x
|
|
}
|
|
|
|
// CHECK-LABEL: sil private [thunk] [ossa] @collard_greens : $@convention(c)
|
|
// CHECK: function_ref @$s5cdecl4kale[[PRIVATE:.*]]
|
|
// CHECK: sil private [ossa] @$s5cdecl4kale[[PRIVATE:.*]]
|
|
@_cdecl("collard_greens")
|
|
private func kale(_ x: Int) -> Int {
|
|
return x
|
|
}
|
|
|
|
/* TODO: Handle error conventions
|
|
@_cdecl("vomits")
|
|
func barfs() throws {}
|
|
*/
|