mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
35 lines
930 B
Swift
35 lines
930 B
Swift
// RUN: %target-run-simple-swift
|
|
// REQUIRES: executable_test
|
|
// REQUIRES: CPU=arm64e
|
|
|
|
import StdlibUnittest
|
|
|
|
var PtrAuthFunctionPointersTestSuite = TestSuite("PtrAuthFunctionPointers")
|
|
|
|
func foo() {}
|
|
func bar() {}
|
|
|
|
struct FuncPtrs {
|
|
var a: ()->()
|
|
var b: ()->()
|
|
}
|
|
|
|
PtrAuthFunctionPointersTestSuite.test("PointerAreSigned") {
|
|
var ptrs = FuncPtrs(a: foo, b: bar)
|
|
withUnsafeBytes(of: &ptrs) { bytes in
|
|
let p = bytes.load(fromByteOffset: 0, as: UInt.self)
|
|
expectEqual(UInt.bitWidth, 64)
|
|
let signature = p & 0x00fffff0_00000000
|
|
let actualPointer = p & 0x0000000f_ffffffff
|
|
|
|
// The top byte of a signed function pointer actually being zero is only
|
|
// guaranteed by ARMv8.3 if TBI is enabled, which it isn't for function
|
|
// pointers in new iOS releases
|
|
//expectEqual(topByte, 0)
|
|
expectNotEqual(signature, 0)
|
|
expectNotEqual(actualPointer, 0)
|
|
}
|
|
}
|
|
|
|
runAllTests()
|