mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
191 lines
8.6 KiB
Swift
191 lines
8.6 KiB
Swift
// REQUIRES: swift_swift_parser
|
|
|
|
// RUN: %target-swift-frontend %s -swift-version 5 -module-name main -disable-availability-checking -typecheck -plugin-path %swift-plugin-dir -strict-memory-safety -warnings-as-errors -dump-macro-expansions 2>&1 | %FileCheck --match-full-lines %s
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func plain(_ ptr: UnsafePointer<CInt>) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func opt(_ ptr: UnsafePointer<CInt>?) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func mut(_ ptr: UnsafeMutablePointer<CInt>) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func mutOpt(_ ptr: UnsafeMutablePointer<CInt>?) {}
|
|
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"), .nonescaping(pointer: .param(1)))
|
|
func noescape(_ ptr: UnsafePointer<CInt>) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"), .nonescaping(pointer: .param(1)))
|
|
func noescapeOpt(_ ptr: UnsafePointer<CInt>?) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"), .nonescaping(pointer: .param(1)))
|
|
func noescapeMut(_ ptr: UnsafeMutablePointer<CInt>) {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"), .nonescaping(pointer: .param(1)))
|
|
func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) {}
|
|
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .return, count: "37"))
|
|
func plainReturn() -> UnsafePointer<CInt> {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .return, count: "37"))
|
|
func optReturn() -> UnsafePointer<CInt>? {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .return, count: "37"))
|
|
func mutReturn() -> UnsafeMutablePointer<CInt> {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .return, count: "37"))
|
|
func mutOptReturn() -> UnsafeMutablePointer<CInt>? {}
|
|
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func noescape(_ ptr: UnsafePointer<CInt>) -> UnsafePointer<CInt> {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func noescapeOpt(_ ptr: UnsafePointer<CInt>?) -> UnsafePointer<CInt>? {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func noescapeMut(_ ptr: UnsafeMutablePointer<CInt>) -> UnsafeMutablePointer<CInt> {}
|
|
|
|
@_SwiftifyImport(.countedBy(pointer: .param(1), count: "37"))
|
|
func noescapeMutOpt(_ ptr: UnsafeMutablePointer<CInt>?) -> UnsafeMutablePointer<CInt>? {}
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func plain(_ ptr: UnsafeBufferPointer<CInt>) {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in plain: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe plain(ptr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func opt(_ ptr: UnsafeBufferPointer<CInt>?) {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr?.count ?? 0
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in opt: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe opt(ptr?.baseAddress)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func mut(_ ptr: UnsafeMutableBufferPointer<CInt>) {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in mut: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe mut(ptr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func mutOpt(_ ptr: UnsafeMutableBufferPointer<CInt>?) {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr?.count ?? 0
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in mutOpt: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe mutOpt(ptr?.baseAddress)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func noescape(_ ptr: Span<CInt>) {
|
|
// CHECK-NEXT: let _ptrCount = ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescape: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe ptr.withUnsafeBufferPointer { _ptrPtr in
|
|
// CHECK-NEXT: return unsafe noescape(_ptrPtr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func noescape(_ ptr: UnsafeBufferPointer<CInt>) -> UnsafePointer<CInt> {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescape: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe noescape(ptr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func noescapeOpt(_ ptr: Span<CInt>?) {
|
|
// CHECK-NEXT: let _ptrCount = ptr?.count ?? 0
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescapeOpt: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return { () in
|
|
// CHECK-NEXT: return if ptr == nil {
|
|
// CHECK-NEXT: unsafe noescapeOpt(nil)
|
|
// CHECK-NEXT: } else {
|
|
// CHECK-NEXT: unsafe ptr!.withUnsafeBufferPointer { _ptrPtr in
|
|
// CHECK-NEXT: return unsafe noescapeOpt(_ptrPtr.baseAddress)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }()
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_lifetime(ptr: copy ptr) @_disfavoredOverload
|
|
// CHECK-NEXT: func noescapeMut(_ ptr: inout MutableSpan<CInt>) {
|
|
// CHECK-NEXT: let _ptrCount = ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescapeMut: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe ptr.withUnsafeMutableBufferPointer { _ptrPtr in
|
|
// CHECK-NEXT: return unsafe noescapeMut(_ptrPtr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func noescapeMut(_ ptr: UnsafeMutableBufferPointer<CInt>) -> UnsafeMutablePointer<CInt> {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr.count
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescapeMut: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe noescapeMut(ptr.baseAddress!)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func noescapeMutOpt(_ ptr: UnsafeMutableBufferPointer<CInt>?) -> UnsafeMutablePointer<CInt>? {
|
|
// CHECK-NEXT: let _ptrCount = unsafe ptr?.count ?? 0
|
|
// CHECK-NEXT: if _ptrCount != 37 {
|
|
// CHECK-NEXT: fatalError("bounds check failure in noescapeMutOpt: expected \(37) but got \(_ptrCount)")
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: return unsafe noescapeMutOpt(ptr?.baseAddress)
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func plainReturn() -> UnsafeBufferPointer<CInt> {
|
|
// CHECK-NEXT: return unsafe UnsafeBufferPointer<CInt> (start: unsafe plainReturn(), count: Int(37))
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func optReturn() -> UnsafeBufferPointer<CInt>? {
|
|
// CHECK-NEXT: return unsafe { () in
|
|
// CHECK-NEXT: let _resultValue = unsafe optReturn()
|
|
// CHECK-NEXT: if unsafe _resultValue == nil {
|
|
// CHECK-NEXT: return nil
|
|
// CHECK-NEXT: } else {
|
|
// CHECK-NEXT: return unsafe _swiftifyOverrideLifetime(UnsafeBufferPointer<CInt>(start: _resultValue!, count: Int(37)), copying: ())
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }()
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func mutReturn() -> UnsafeMutableBufferPointer<CInt> {
|
|
// CHECK-NEXT: return unsafe UnsafeMutableBufferPointer<CInt> (start: unsafe mutReturn(), count: Int(37))
|
|
// CHECK-NEXT: }
|
|
|
|
// CHECK: @_alwaysEmitIntoClient @_disfavoredOverload
|
|
// CHECK-NEXT: func mutOptReturn() -> UnsafeMutableBufferPointer<CInt>? {
|
|
// CHECK-NEXT: return unsafe { () in
|
|
// CHECK-NEXT: let _resultValue = unsafe mutOptReturn()
|
|
// CHECK-NEXT: if unsafe _resultValue == nil {
|
|
// CHECK-NEXT: return nil
|
|
// CHECK-NEXT: } else {
|
|
// CHECK-NEXT: return unsafe _swiftifyOverrideLifetime(UnsafeMutableBufferPointer<CInt>(start: _resultValue!, count: Int(37)), copying: ())
|
|
// CHECK-NEXT: }
|
|
// CHECK-NEXT: }()
|
|
// CHECK-NEXT: }
|