mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
The layouts of resilient value types shipped in the Swift 5 standard library x and overlays will forever be frozen in time for backward deployment to old Objective-C runtimes. This PR ensures that even if the layouts of these types evolve in the future, binaries built to run on the old runtime will continue to lay out class instances in a manner compatible with Swift 5. Fixes <rdar://problem/45646886>.
34 lines
972 B
Plaintext
34 lines
972 B
Plaintext
// RUN: %swift -disable-legacy-type-info -target arm64-apple-ios7.1 %s -module-name main -emit-ir -o - | %FileCheck %s
|
|
|
|
// REQUIRES: CODEGENERATOR=AArch64
|
|
|
|
sil_stage canonical
|
|
|
|
sil @foo : $@convention(thin) () -> () {
|
|
bb0:
|
|
// In a simple module-appending scheme where we emitted SIL
|
|
// functions in order, this function reference would cause
|
|
// @baz to be created immediately following @foo because we
|
|
// won't yet have created the declaration for @bar.
|
|
%0 = function_ref @baz : $@convention(thin) () -> ()
|
|
%1 = apply %0() : $@convention(thin) () -> ()
|
|
return %1 : $()
|
|
}
|
|
|
|
sil @bar : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = tuple ()
|
|
return %0 : $()
|
|
}
|
|
|
|
sil @baz : $@convention(thin) () -> () {
|
|
bb0:
|
|
%0 = tuple ()
|
|
return %0 : $()
|
|
}
|
|
|
|
// Make sure that these functions are emitted in the order they
|
|
// CHECK: define{{( protected)?}} swiftcc void @foo
|
|
// CHECK: define{{( protected)?}} swiftcc void @bar
|
|
// CHECK: define{{( protected)?}} swiftcc void @baz
|