From a77b8cea709e6038db86afd810a4cd21e0dd2425 Mon Sep 17 00:00:00 2001 From: Guillaume Lessard Date: Thu, 1 Aug 2024 09:20:16 -0700 Subject: [PATCH 1/2] [stdlib] alter inconsistent declarations `private` declarations should never be allowed to carry the `@_alwaysEmitIntoClient` attribute. This has been allowed by mistake for a while, but newer compilers should make this an error. --- stdlib/public/core/CString.swift | 2 +- stdlib/public/core/String.swift | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/stdlib/public/core/CString.swift b/stdlib/public/core/CString.swift index 8a45fad35319e..b26b6600dd220 100644 --- a/stdlib/public/core/CString.swift +++ b/stdlib/public/core/CString.swift @@ -77,7 +77,7 @@ extension String { } @_alwaysEmitIntoClient - private init(_checkingCString bytes: UnsafeBufferPointer) { + internal init(_checkingCString bytes: UnsafeBufferPointer) { guard let length = bytes.firstIndex(of: 0) else { _preconditionFailure( "input of String.init(cString:) must be null-terminated" diff --git a/stdlib/public/core/String.swift b/stdlib/public/core/String.swift index 06fa7c0fb77f3..7f3f0d27cb279 100644 --- a/stdlib/public/core/String.swift +++ b/stdlib/public/core/String.swift @@ -428,7 +428,7 @@ extension String { // check in String(decoding:as:). @_alwaysEmitIntoClient @inline(never) // slow-path - private static func _fromNonContiguousUnsafeBitcastUTF8Repairing< + internal static func _fromNonContiguousUnsafeBitcastUTF8Repairing< C: Collection >(_ input: C) -> (result: String, repairsMade: Bool) { _internalInvariant(C.Element.self == UInt8.self) From dd854faad1218430e37e747937f2d84c99021c23 Mon Sep 17 00:00:00 2001 From: Guillaume Lessard Date: Thu, 1 Aug 2024 09:21:24 -0700 Subject: [PATCH 2/2] [stdlib] use temporary rebinding as appropriate --- stdlib/public/core/String.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/stdlib/public/core/String.swift b/stdlib/public/core/String.swift index 7f3f0d27cb279..71552c44dc4a8 100644 --- a/stdlib/public/core/String.swift +++ b/stdlib/public/core/String.swift @@ -433,8 +433,9 @@ extension String { >(_ input: C) -> (result: String, repairsMade: Bool) { _internalInvariant(C.Element.self == UInt8.self) return Array(input).withUnsafeBufferPointer { - let raw = UnsafeRawBufferPointer($0) - return String._fromUTF8Repairing(raw.bindMemory(to: UInt8.self)) + UnsafeRawBufferPointer($0).withMemoryRebound(to: UInt8.self) { + String._fromUTF8Repairing($0) + } } }