mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Keep track of a second set of "direct method reference" curry thunks that don't end in a dynamic dispatch in order to properly implement a partial application such as 'let foo = super.foo'. Fixes rdar://problem/20598526. Swift SVN r27538
42 lines
1.7 KiB
Swift
42 lines
1.7 KiB
Swift
// RUN: %target-swift-frontend -emit-silgen %s | FileCheck %s
|
|
|
|
class B {
|
|
func foo() { }
|
|
func bar()() { }
|
|
}
|
|
|
|
class D: B {
|
|
override func foo() { }
|
|
override func bar()() { }
|
|
|
|
// CHECK-LABEL: sil hidden @_TFC19partial_apply_super1D7getFoosfS0_FT_TFT_T_FT_T__
|
|
// CHECK: function_ref @_TFC19partial_apply_super1D3fooFS0_FT_T_
|
|
// CHECK: function_ref @_TTdFC19partial_apply_super1B3fooFS0_FT_T_
|
|
func getFoos() -> (() -> (), () -> ()) {
|
|
return (self.foo, super.foo)
|
|
}
|
|
|
|
// CHECK-LABEL: sil shared @_TFC19partial_apply_super1D3fooFS0_FT_T_
|
|
// CHECK: class_method %0 : $D, #D.foo!1
|
|
|
|
// CHECK-LABEL: sil shared @_TTdFC19partial_apply_super1B3fooFS0_FT_T_
|
|
// CHECK: function_ref @_TFC19partial_apply_super1B3foofS0_FT_T_
|
|
|
|
// CHECK-LABEL: sil hidden @_TFC19partial_apply_super1D7getBarsfS0_FT_TFT_FT_T_FT_FT_T__
|
|
// CHECK: function_ref @_TFC19partial_apply_super1D3barFS0_FT_FT_T_
|
|
// CHECK: function_ref @_TTdFC19partial_apply_super1B3barFS0_FT_FT_T_
|
|
func getBars() -> (() -> () -> (), () -> () -> ()) {
|
|
return (self.bar, super.bar)
|
|
}
|
|
|
|
// CHECK-LABEL: sil shared @_TFC19partial_apply_super1D3barFS0_FT_FT_T_
|
|
// CHECK: function_ref @_TFC19partial_apply_super1D3barfS0_FT_FT_T_
|
|
// CHECK-LABEL: sil shared @_TFC19partial_apply_super1D3barfS0_FT_FT_T_
|
|
// CHECK: class_method %0 : $D, #D.bar!2
|
|
|
|
// CHECK-LABEL: sil shared @_TTdFC19partial_apply_super1B3barFS0_FT_FT_T_
|
|
// CHECK: function_ref @_TTdFC19partial_apply_super1B3barfS0_FT_FT_T_
|
|
// CHECK-LABEL: sil shared @_TTdFC19partial_apply_super1B3barfS0_FT_FT_T_
|
|
// CHECK: function_ref @_TFC19partial_apply_super1B3barfS0_fT_FT_T_
|
|
}
|