Skip to content

Commit 5060e8f

Browse files
authored
Merge pull request #84837 from hnrklssn/fix-ubp-count-unsafe
[Swiftify] Don't use `unsafe` for Unsafe[Mut][Raw]BufferPointer.count
2 parents 16f1476 + 2e01ba3 commit 5060e8f

25 files changed

+58
-57
lines changed

lib/Macros/Sources/SwiftMacros/SwiftifyImportMacro.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,8 @@ struct CountedOrSizedPointerThunkBuilder: ParamBoundsThunkBuilder, PointerBounds
882882
}
883883

884884
func makeCount() -> ExprSyntax {
885-
let unsafeKw = generateSpan ? "" : "unsafe "
885+
// We shouldn't need this for any case, but UnsafeBufferPointer?.count is currently seen as unsafe
886+
let unsafeKw = (generateSpan || !nullable) ? "" : "unsafe "
886887
if nullable {
887888
return ExprSyntax("\(raw: unsafeKw)\(name)?.\(raw: countLabel) ?? 0")
888889
}

test/Macros/SwiftifyImport/CountedBy/Anonymous.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ public func myFunc4(_: UnsafeMutablePointer<CInt>, _ len: CInt) {
2020

2121
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
2222
// CHECK-NEXT: public func myFunc(_ _myFunc_param0: UnsafeBufferPointer<CInt>) {
23-
// CHECK-NEXT: let _myFunc_param1 = CInt(exactly: unsafe _myFunc_param0.count)!
23+
// CHECK-NEXT: let _myFunc_param1 = CInt(exactly: _myFunc_param0.count)!
2424
// CHECK-NEXT: return unsafe myFunc(_myFunc_param0.baseAddress!, _myFunc_param1)
2525
// CHECK-NEXT: }
2626

2727
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
2828
// CHECK-NEXT: public func myFunc2(_ _myFunc2_param0: UnsafeBufferPointer<CInt>, _ _myFunc2_param2: CInt) {
29-
// CHECK-NEXT: let _myFunc2_param1 = CInt(exactly: unsafe _myFunc2_param0.count)!
29+
// CHECK-NEXT: let _myFunc2_param1 = CInt(exactly: _myFunc2_param0.count)!
3030
// CHECK-NEXT: return unsafe myFunc2(_myFunc2_param0.baseAddress!, _myFunc2_param1, _myFunc2_param2)
3131
// CHECK-NEXT: }
3232

test/Macros/SwiftifyImport/CountedBy/ConstantCount.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) -> UnsafeMutablePointer<
5555

5656
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
5757
// CHECK-NEXT: func plain(_ ptr: UnsafeBufferPointer<CInt>) {
58-
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
58+
// CHECK-NEXT: let _ptrCount = ptr.count
5959
// CHECK-NEXT: if _ptrCount != 37 {
6060
// CHECK-NEXT: fatalError("bounds check failure in plain: expected \(37) but got \(_ptrCount)")
6161
// CHECK-NEXT: }
@@ -73,7 +73,7 @@ func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) -> UnsafeMutablePointer<
7373

7474
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
7575
// CHECK-NEXT: func mut(_ ptr: UnsafeMutableBufferPointer<CInt>) {
76-
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
76+
// CHECK-NEXT: let _ptrCount = ptr.count
7777
// CHECK-NEXT: if _ptrCount != 37 {
7878
// CHECK-NEXT: fatalError("bounds check failure in mut: expected \(37) but got \(_ptrCount)")
7979
// CHECK-NEXT: }
@@ -102,7 +102,7 @@ func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) -> UnsafeMutablePointer<
102102

103103
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
104104
// CHECK-NEXT: func noescape(_ ptr: UnsafeBufferPointer<CInt>) -> UnsafePointer<CInt> {
105-
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
105+
// CHECK-NEXT: let _ptrCount = ptr.count
106106
// CHECK-NEXT: if _ptrCount != 37 {
107107
// CHECK-NEXT: fatalError("bounds check failure in noescape: expected \(37) but got \(_ptrCount)")
108108
// CHECK-NEXT: }
@@ -139,7 +139,7 @@ func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) -> UnsafeMutablePointer<
139139

140140
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
141141
// CHECK-NEXT: func noescapeMut(_ ptr: UnsafeMutableBufferPointer<CInt>) -> UnsafeMutablePointer<CInt> {
142-
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
142+
// CHECK-NEXT: let _ptrCount = ptr.count
143143
// CHECK-NEXT: if _ptrCount != 37 {
144144
// CHECK-NEXT: fatalError("bounds check failure in noescapeMut: expected \(37) but got \(_ptrCount)")
145145
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/CountExpr.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ func myFunc(_ ptr: UnsafePointer<CInt>, _ size: CInt, _ count: CInt) {
88

99
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeBufferPointer<CInt>, _ size: CInt, _ count: CInt) {
11-
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
11+
// CHECK-NEXT: let _ptrCount = ptr.count
1212
// CHECK-NEXT: if _ptrCount != size * count {
1313
// CHECK-NEXT: fatalError("bounds check failure in myFunc: expected \(size * count) but got \(_ptrCount)")
1414
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/MultipleParams.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ func myFunc(_ ptr: UnsafePointer<CInt>, _ len: CInt, _ ptr2: UnsafePointer<CInt>
88

99
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeBufferPointer<CInt>, _ ptr2: UnsafeBufferPointer<CInt>) {
11-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
12-
// CHECK-NEXT: let len2 = CInt(exactly: unsafe ptr2.count)!
11+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
12+
// CHECK-NEXT: let len2 = CInt(exactly: ptr2.count)!
1313
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, len, ptr2.baseAddress!, len2)
1414
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/Mutable.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ func myFunc(_ ptr: UnsafeMutablePointer<CInt>, _ len: CInt) {
88

99
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeMutableBufferPointer<CInt>) {
11-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
11+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
1212
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, len)
1313
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/NamedParams.swift

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,36 +28,36 @@ func allNamedOther(buf ptr: UnsafePointer<CInt>, count len: CInt) {
2828

2929
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
3030
// CHECK-NEXT: func ptrNamed(ptr: UnsafeBufferPointer<CInt>) {
31-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
31+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
3232
// CHECK-NEXT: return unsafe ptrNamed(ptr: ptr.baseAddress!, len)
3333
// CHECK-NEXT: }
3434

3535
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
3636
// CHECK-NEXT: func ptrNamedOther(buf ptr: UnsafeBufferPointer<CInt>) {
37-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
37+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
3838
// CHECK-NEXT: return unsafe ptrNamedOther(buf: ptr.baseAddress!, len)
3939
// CHECK-NEXT: }
4040

4141
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
4242
// CHECK-NEXT: func lenNamed(_ ptr: UnsafeBufferPointer<CInt>) {
43-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
43+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
4444
// CHECK-NEXT: return unsafe lenNamed(ptr.baseAddress!, len: len)
4545
// CHECK-NEXT: }
4646

4747
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
4848
// CHECK-NEXT: func lenNamedOther(_ ptr: UnsafeBufferPointer<CInt>) {
49-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
49+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
5050
// CHECK-NEXT: return unsafe lenNamedOther(ptr.baseAddress!, count: len)
5151
// CHECK-NEXT: }
5252

5353
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
5454
// CHECK-NEXT: func allNamed(ptr: UnsafeBufferPointer<CInt>) {
55-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
55+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
5656
// CHECK-NEXT: return unsafe allNamed(ptr: ptr.baseAddress!, len: len)
5757
// CHECK-NEXT: }
5858

5959
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
6060
// CHECK-NEXT: func allNamedOther(buf ptr: UnsafeBufferPointer<CInt>) {
61-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
61+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
6262
// CHECK-NEXT: return unsafe allNamedOther(buf: ptr.baseAddress!, count: len)
6363
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/PointerReturn.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,6 @@ func lifetimeDependentBorrow(_ p: borrowing UnsafePointer<CInt>, _ len1: CInt, _
3838

3939
// CHECK: @_alwaysEmitIntoClient @_lifetime(borrow p) @_disfavoredOverload
4040
// CHECK-NEXT: func lifetimeDependentBorrow(_ p: borrowing UnsafeBufferPointer<CInt>, _ len2: CInt) -> Span<CInt> {
41-
// CHECK-NEXT: let len1 = CInt(exactly: unsafe p.count)!
41+
// CHECK-NEXT: let len1 = CInt(exactly: p.count)!
4242
// CHECK-NEXT: return unsafe _swiftifyOverrideLifetime(Span<CInt> (_unsafeStart: unsafe lifetimeDependentBorrow(p.baseAddress!, len1, len2), count: Int(len2)), copying: ())
4343
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/QualifiedTypes.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ func bar(_ ptr: Swift.UnsafePointer<Swift.CInt>, _ len: Swift.Int) -> () {
1212

1313
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
1414
// CHECK-NEXT: func foo(_ ptr: Swift.UnsafeBufferPointer<Swift.Int>) -> Swift.Void {
15-
// CHECK-NEXT: let len = unsafe ptr.count
15+
// CHECK-NEXT: let len = ptr.count
1616
// CHECK-NEXT: return unsafe foo(ptr.baseAddress!, len)
1717
// CHECK-NEXT: }
1818

1919
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
2020
// CHECK-NEXT: func bar(_ ptr: Swift.UnsafeBufferPointer<Swift.CInt>) -> () {
21-
// CHECK-NEXT: let len = unsafe ptr.count
21+
// CHECK-NEXT: let len = ptr.count
2222
// CHECK-NEXT: return unsafe bar(ptr.baseAddress!, len)
2323
// CHECK-NEXT: }

test/Macros/SwiftifyImport/CountedBy/Return.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ func myFunc(_ ptr: UnsafePointer<CInt>, _ len: CInt) -> CInt {
88

99
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeBufferPointer<CInt>) -> CInt {
11-
// CHECK-NEXT: let len = CInt(exactly: unsafe ptr.count)!
11+
// CHECK-NEXT: let len = CInt(exactly: ptr.count)!
1212
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, len)
1313
// CHECK-NEXT: }

0 commit comments

Comments
 (0)