swift
fe1fd2e4 - [stdlib] fix UnsafePointer.withMemoryRebound(to:capacity:) argument type. (#4908)

Commit
9 years ago
[stdlib] fix UnsafePointer.withMemoryRebound(to:capacity:) argument type. (#4908) SE-0107 states that UnsafePointer.withMemoryRebound(to:capacity:) should produce a const UnsafePointer, but the implementation that I committed in Whitney produces an UnsafeMutablePointer. As a result Swift 3 accepts code, that we would like to reject: func takesUInt(_: UnsafeMutablePointer<UInt>) {} func takesConstUInt(_: UnsafePointer<UInt>) {} func foo(p: UnsafePointer<Int>) { p.withMemoryRebound(to: UInt.self, capacity: 1) { takesUInt($0) // <========= implicitly converts to a mutable pointer takesConstUInt($0) } } We would like to reject this in favor of: func takesUInt(_: UnsafeMutablePointer<UInt>) {} func takesConstUInt(_: UnsafePointer<UInt>) {} func foo(p: UnsafePointer<Int>) { p.withMemoryRebound(to: UInt.self, capacity: 1) { takesUInt(UnsafeMutablePointer(mutating: $0)) takesConstUInt($0) } } This looks to me like an experimental change accidentally creeped onto my branch and it was hard to spot in .gyb code. I needed to write the unit test in terms of UnsafeMutablePointer in order to use expectType, so didn't catch this. rdar://28409842 UnsafePointer.withMemoryRebound(to:capacity:) incorrectly produces a mutable pointer argument
Author
Parents
Loading