mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
When Embedded Swift emits a symbol that was imported from another module, ensure that the symbol is emitted as a weak definition. This way, importing the same module (and using its symbol) into several different modules doesn't cause duplicate-symbol errors at link time. Rather, the linker will merge the different symbol definitions. This makes Embedded Swift libraries work without resorting to `-mergeable-symbols` or `-emit-empty-object-file`.
23 lines
672 B
Swift
23 lines
672 B
Swift
// RUN: %target-swift-emit-sil %s -parse-stdlib -O | %FileCheck %s
|
|
// RUN: %target-swift-emit-sil %s -parse-stdlib -O -enable-experimental-feature Embedded | %FileCheck %s --check-prefix EMBEDDED
|
|
|
|
// REQUIRES: swift_in_compiler
|
|
// REQUIRES: swift_feature_Embedded
|
|
|
|
struct X {}
|
|
|
|
struct MyStruct<T> {
|
|
@_optimize(none)
|
|
public func foo() {}
|
|
}
|
|
|
|
public func test() {
|
|
MyStruct<X>().foo()
|
|
}
|
|
|
|
// CHECK: MyStruct.foo()
|
|
// CHECK: sil hidden [Onone] @$s4main8MyStructV3fooyyF : $@convention(method) <T> (MyStruct<T>) -> () {
|
|
|
|
// EMBEDDED: // specialized MyStruct.foo()
|
|
// EMBEDDED: sil shared [Onone] @$e4main8MyStructV3fooyyFAA1XV_Tg5 : $@convention(method) (MyStruct<X>) -> () {
|