mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Conformance manglings, which are used for witness tables and related witness thunks, mangle the generic signature of the conformance. Since conformances also describe the conforming type, mangle the conformances's generic signature relative to the conforming type's generic signature. In practice, this means that we don't mangle any part of the generic signature into a conformance mangling now, so we see a decent win: 2.3% smaller trie and 6.4% smaller strings section in the standard library binary. When conditional conformances land, we'll see some generic signatures mangling again (for the additional requirements of the constrained extension).
14 lines
827 B
Swift
14 lines
827 B
Swift
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-silgen -primary-file %s -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h | %FileCheck --check-prefix=SIL %s
|
|
// RUN: %target-swift-frontend(mock-sdk: %clang-importer-sdk) -emit-ir -primary-file %s -import-objc-header %S/Inputs/objc_generic_protocol_conformance.h | %FileCheck --check-prefix=IR %s
|
|
|
|
// REQUIRES: objc_interop
|
|
|
|
protocol P {
|
|
func foo()
|
|
}
|
|
|
|
extension Foo: P {}
|
|
|
|
// SIL-LABEL: sil private [transparent] [thunk] @_T0So3FooCyxG33objc_generic_protocol_conformance1PA2dEP3fooyyFTW {{.*}} @pseudogeneric
|
|
// IR-LABEL: define internal swiftcc void @_T0So3FooCyxG33objc_generic_protocol_conformance1PA2dEP3fooyyFTW(%TSo3FooC** noalias nocapture swiftself dereferenceable({{4|8}}), %swift.type*{{( %Self)?}}, i8**{{( %SelfWitnessTable)?}})
|