diff --git a/stdlib/public/core/FloatingPointParsing.swift.gyb b/stdlib/public/core/FloatingPointParsing.swift.gyb index f65c8c2b7018..00174fdb5cef 100644 --- a/stdlib/public/core/FloatingPointParsing.swift.gyb +++ b/stdlib/public/core/FloatingPointParsing.swift.gyb @@ -256,14 +256,13 @@ extension ${Self}: LosslessStringConvertible { // Use the all-Swift `parse_float${bits}()` implementation for Float16/32/64 @available(SwiftStdlib 5.3, *) public init?(_ text: Substring) { - // TODO: Someday, this whole function should simplify down to just: - // ${Self}(text.utf8.span) #if _pointerBitWidth(_16) // Always fail on 16-bit targets return nil #else - // Work around span availability limits - let parsed = unsafe text.base._guts.withFastUTF8 { chars -> ${Self}? in + var mutableText = text + let parsed: ${Self}? + parsed = mutableText.withUTF8 { chars -> ${Self}? in unsafe parse_float${bits}(chars.span) } diff --git a/test/stdlib/ParseFloat64-bridging.swift b/test/stdlib/ParseFloat64-bridging.swift new file mode 100644 index 000000000000..730a073ab049 --- /dev/null +++ b/test/stdlib/ParseFloat64-bridging.swift @@ -0,0 +1,39 @@ +// RUN: %empty-directory(%t) +// RUN: %target-build-swift -g %s -o %t/a.out -enable-experimental-feature Extern +// RUN: %target-codesign %t/a.out +// RUN: %target-run %t/a.out + +// REQUIRES: executable_test +// REQUIRES: objc_interop + +// Needed to declare the ABI entry point +// REQUIRES: swift_feature_Extern + +import StdlibUnittest +import Foundation + +let tests = TestSuite("FloatingPointParsing") + +tests.test("Bridged - short") { + let s1 = "1.02.03.0" + let nss1 = NSString(utf8String: s1)! + let bridged = String(nss1) + let range = bridged.firstIndex(of: "2")!..>,