Skip to content

Commit ae7e14c

Browse files
author
Gabor Horvath
committed
[cxx-interop] Avoid warnings in strict memory safe mode on in generated code
The generated safe wrappers need to call unsafe code. Make sure those calls are qualified with unsafe to avoid warnings that are not actionable (users cannot fix them).
1 parent fcc367a commit ae7e14c

30 files changed

+63
-63
lines changed

lib/Macros/Sources/SwiftMacros/SwiftifyImportMacro.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -599,7 +599,7 @@ struct CountedOrSizedPointerThunkBuilder: ParamPointerBoundsThunkBuilder {
599599
let unwrappedCall = ExprSyntax(
600600
"""
601601
\(ptrRef).\(raw: funcName) { \(unwrappedName) in
602-
return \(call)
602+
return unsafe \(call)
603603
}
604604
""")
605605
return unwrappedCall
@@ -660,7 +660,7 @@ struct CountedOrSizedPointerThunkBuilder: ParamPointerBoundsThunkBuilder {
660660
return ExprSyntax(
661661
"""
662662
if \(name) == nil {
663-
\(try base.buildFunctionCall(nullArgs))
663+
unsafe \(try base.buildFunctionCall(nullArgs))
664664
} else {
665665
\(unwrappedCall)
666666
}
@@ -1142,7 +1142,7 @@ public struct SwiftifyImportMacro: PeerMacro {
11421142
item: CodeBlockItemSyntax.Item(
11431143
ReturnStmtSyntax(
11441144
returnKeyword: .keyword(.return, trailingTrivia: " "),
1145-
expression: try builder.buildFunctionCall([:]))))
1145+
expression: ExprSyntax("unsafe \(try builder.buildFunctionCall([:]))"))))
11461146
let body = CodeBlockSyntax(statements: CodeBlockItemListSyntax(checks + [call]))
11471147
let lifetimeAttrs = lifetimeAttributes(funcDecl, lifetimeDependencies)
11481148
let disfavoredOverload : [AttributeListSyntax.Element] = (onlyReturnTypeChanged ? [

test/Macros/SwiftifyImport/CountedBy/CountExpr.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ func myFunc(_ ptr: UnsafePointer<CInt>, _ size: CInt, _ count: CInt) {
1212
// CHECK-NEXT: if ptr.count < _ptrCount || _ptrCount < 0 {
1313
// CHECK-NEXT: fatalError("bounds check failure when calling unsafe function")
1414
// CHECK-NEXT: }
15-
// CHECK-NEXT: return myFunc(ptr.baseAddress!, size, count)
15+
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, size, count)
1616
// CHECK-NEXT: }
1717

test/Macros/SwiftifyImport/CountedBy/MultipleParams.swift

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

99
// CHECK: @_alwaysEmitIntoClient
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeBufferPointer<CInt>, _ ptr2: UnsafeBufferPointer<CInt>) {
11-
// CHECK-NEXT: return myFunc(ptr.baseAddress!, CInt(exactly: ptr.count)!, ptr2.baseAddress!, CInt(exactly: ptr2.count)!)
11+
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, CInt(exactly: ptr.count)!, ptr2.baseAddress!, CInt(exactly: ptr2.count)!)
1212
// 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
1010
// CHECK-NEXT: func myFunc(_ ptr: UnsafeMutableBufferPointer<CInt>) {
11-
// CHECK-NEXT: return myFunc(ptr.baseAddress!, CInt(exactly: ptr.count)!)
11+
// CHECK-NEXT: return unsafe myFunc(ptr.baseAddress!, CInt(exactly: ptr.count)!)
1212
// CHECK-NEXT: }
1313

test/Macros/SwiftifyImport/CountedBy/MutableSpan.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ func myFunc(_ ptr: UnsafeMutablePointer<CInt>, _ len: CInt) {
99

1010
// CHECK: @_alwaysEmitIntoClient
1111
// CHECK-NEXT: func myFunc(_ ptr: MutableSpan<CInt>) {
12-
// CHECK-NEXT: return ptr.withUnsafeBufferPointer { _ptrPtr in
13-
// CHECK-NEXT: return myFunc(_ptrPtr.baseAddress!, CInt(exactly: ptr.count)!)
12+
// CHECK-NEXT: return unsafe ptr.withUnsafeBufferPointer { _ptrPtr in
13+
// CHECK-NEXT: return unsafe myFunc(_ptrPtr.baseAddress!, CInt(exactly: ptr.count)!)
1414
// CHECK-NEXT: }
1515
// CHECK-NEXT: }
1616

test/Macros/SwiftifyImport/CountedBy/NamedParams.swift

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

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

3434
// CHECK: @_alwaysEmitIntoClient
3535
// CHECK-NEXT: func ptrNamedOther(buf ptr: UnsafeBufferPointer<CInt>) {
36-
// CHECK-NEXT: return ptrNamedOther(buf: ptr.baseAddress!, CInt(exactly: ptr.count)!)
36+
// CHECK-NEXT: return unsafe ptrNamedOther(buf: ptr.baseAddress!, CInt(exactly: ptr.count)!)
3737
// CHECK-NEXT: }
3838

3939
// CHECK: @_alwaysEmitIntoClient
4040
// CHECK-NEXT: func lenNamed(_ ptr: UnsafeBufferPointer<CInt>) {
41-
// CHECK-NEXT: return lenNamed(ptr.baseAddress!, len: CInt(exactly: ptr.count)!)
41+
// CHECK-NEXT: return unsafe lenNamed(ptr.baseAddress!, len: CInt(exactly: ptr.count)!)
4242
// CHECK-NEXT: }
4343

4444
// CHECK: @_alwaysEmitIntoClient
4545
// CHECK-NEXT: func lenNamedOther(_ ptr: UnsafeBufferPointer<CInt>) {
46-
// CHECK-NEXT: return lenNamedOther(ptr.baseAddress!, count: CInt(exactly: ptr.count)!)
46+
// CHECK-NEXT: return unsafe lenNamedOther(ptr.baseAddress!, count: CInt(exactly: ptr.count)!)
4747
// CHECK-NEXT: }
4848

4949
// CHECK: @_alwaysEmitIntoClient
5050
// CHECK-NEXT: func allNamed(ptr: UnsafeBufferPointer<CInt>) {
51-
// CHECK-NEXT: return allNamed(ptr: ptr.baseAddress!, len: CInt(exactly: ptr.count)!)
51+
// CHECK-NEXT: return unsafe allNamed(ptr: ptr.baseAddress!, len: CInt(exactly: ptr.count)!)
5252
// CHECK-NEXT: }
5353

5454
// CHECK: @_alwaysEmitIntoClient
5555
// CHECK-NEXT: func allNamedOther(buf ptr: UnsafeBufferPointer<CInt>) {
56-
// CHECK-NEXT: return allNamedOther(buf: ptr.baseAddress!, count: CInt(exactly: ptr.count)!)
56+
// CHECK-NEXT: return unsafe allNamedOther(buf: ptr.baseAddress!, count: CInt(exactly: ptr.count)!)
5757
// CHECK-NEXT: }
5858

test/Macros/SwiftifyImport/CountedBy/Nullable.swift

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

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

test/Macros/SwiftifyImport/CountedBy/PointerReturn.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,22 @@ func lifetimeDependentBorrow(_ p: borrowing UnsafePointer<CInt>, _ len1: CInt, _
2121

2222
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
2323
// CHECK-NEXT: func myFunc(_ len: CInt) -> UnsafeMutableBufferPointer<CInt> {
24-
// CHECK-NEXT: return UnsafeMutableBufferPointer<CInt> (start: myFunc(len), count: Int(len))
24+
// CHECK-NEXT: return unsafe UnsafeMutableBufferPointer<CInt> (start: myFunc(len), count: Int(len))
2525
// CHECK-NEXT: }
2626

2727
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
2828
// CHECK-NEXT: func nonEscaping(_ len: CInt) -> UnsafeBufferPointer<CInt> {
29-
// CHECK-NEXT: return UnsafeBufferPointer<CInt> (start: nonEscaping(len), count: Int(len))
29+
// CHECK-NEXT: return unsafe UnsafeBufferPointer<CInt> (start: nonEscaping(len), count: Int(len))
3030

3131
// CHECK: @_alwaysEmitIntoClient @lifetime(p)
3232
// CHECK-NEXT: func lifetimeDependentCopy(_ p: Span<CInt>, _ len2: CInt) -> Span<CInt> {
33-
// CHECK-NEXT: return Span<CInt> (_unsafeStart: p.withUnsafeBufferPointer { _pPtr in
34-
// CHECK-NEXT: return lifetimeDependentCopy(_pPtr.baseAddress!, CInt(exactly: p.count)!, len2)
33+
// CHECK-NEXT: return unsafe Span<CInt> (_unsafeStart: p.withUnsafeBufferPointer { _pPtr in
34+
// CHECK-NEXT: return unsafe lifetimeDependentCopy(_pPtr.baseAddress!, CInt(exactly: p.count)!, len2)
3535
// CHECK-NEXT: }, count: Int(len2))
3636
// CHECK-NEXT: }
3737

3838
// CHECK: @_alwaysEmitIntoClient @lifetime(borrow p)
3939
// CHECK-NEXT: func lifetimeDependentBorrow(_ p: borrowing UnsafeBufferPointer<CInt>, _ len2: CInt) -> Span<CInt> {
40-
// CHECK-NEXT: return Span<CInt> (_unsafeStart: lifetimeDependentBorrow(p.baseAddress!, CInt(exactly: p.count)!, len2), count: Int(len2))
40+
// CHECK-NEXT: return unsafe Span<CInt> (_unsafeStart: lifetimeDependentBorrow(p.baseAddress!, CInt(exactly: p.count)!, len2), count: Int(len2))
4141
// CHECK-NEXT: }
4242

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
1414
// CHECK-NEXT: func foo(_ ptr: Swift.UnsafeBufferPointer<Swift.Int>) -> Swift.Void {
15-
// CHECK-NEXT: return foo(ptr.baseAddress!, ptr.count)
15+
// CHECK-NEXT: return unsafe foo(ptr.baseAddress!, ptr.count)
1616
// CHECK-NEXT: }
1717

1818
// CHECK: @_alwaysEmitIntoClient
1919
// CHECK-NEXT: func bar(_ ptr: Swift.UnsafeBufferPointer<Swift.CInt>) -> () {
20-
// CHECK-NEXT: return bar(ptr.baseAddress!, ptr.count)
20+
// CHECK-NEXT: return unsafe bar(ptr.baseAddress!, ptr.count)
2121
// CHECK-NEXT: }
2222

2323

test/Macros/SwiftifyImport/CountedBy/Return.swift

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

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

0 commit comments

Comments
 (0)