Skip to content

Commit db7a030

Browse files
authored
Extend internal _mangledTypeName() function to take non-copyable types. (swiftlang#76041)
`_mangledTypeName()` returns the Swift-mangled typename of a given type. This PR extends it to take non-copyable types as well. Related to our use case in Swift Testing, but not to the PR directly: swiftlang#69146 swiftlang#69147 swiftlang#71112 Resolves rdar://134278607.
1 parent 1ce178b commit db7a030

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

stdlib/public/core/Misc.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,14 +97,16 @@ func _typeName(_ type: Any.Type, qualified: Bool = true) -> String {
9797

9898
@available(SwiftStdlib 5.3, *)
9999
@_silgen_name("swift_getMangledTypeName")
100-
public func _getMangledTypeName(_ type: Any.Type)
100+
@_preInverseGenerics
101+
public func _getMangledTypeName(_ type: any ~Copyable.Type)
101102
-> (UnsafePointer<UInt8>, Int)
102103

103104
/// Returns the mangled name for a given type.
104105
@available(SwiftStdlib 5.3, *)
105106
@_unavailableInEmbedded
107+
@_preInverseGenerics
106108
public // SPI
107-
func _mangledTypeName(_ type: Any.Type) -> String? {
109+
func _mangledTypeName(_ type: any ~Copyable.Type) -> String? {
108110
let (stringPtr, count) = _getMangledTypeName(type)
109111
guard count > 0 else {
110112
return nil

test/Runtime/demangleToMetadata.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -493,6 +493,8 @@ DemangleToMetadataTests.test("Nested types in same-type-constrained extensions")
493493
// V !: P3 in InnerTEqualsConformsToP1
494494
}
495495

496+
struct NonCopyable: ~Copyable {}
497+
496498
if #available(SwiftStdlib 5.3, *) {
497499
DemangleToMetadataTests.test("Round-trip with _mangledTypeName and _typeByName") {
498500
func roundTrip<T>(_ type: T.Type) {
@@ -524,6 +526,11 @@ if #available(SwiftStdlib 5.3, *) {
524526
let type: Any.Type = Int.self
525527
expectEqual("Si", _mangledTypeName(type))
526528
}
529+
530+
DemangleToMetadataTests.test("Check _MangledTypeName with any ~Copyable.Type") {
531+
let type: any ~Copyable.Type = NonCopyable.self
532+
expectEqual("4main11NonCopyableV", _mangledTypeName(type))
533+
}
527534
}
528535

529536
if #available(SwiftStdlib 5.1, *) {

0 commit comments

Comments
 (0)