// 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()