// RUN: %clang_cc1 -triple arm64-apple-ios \ // RUN: -fptrauth-calls -fptrauth-intrinsics -emit-llvm -fblocks \ // RUN: %s -debug-info-kind=limited -o - | FileCheck %s // RUN: %clang_cc1 -triple aarch64-linux-gnu \ // RUN: -fptrauth-calls -fptrauth-intrinsics -emit-llvm -fblocks \ // RUN: %s -debug-info-kind=limited -o - | FileCheck %s // Constant initializers for data pointers. extern int external_int; int *__ptrauth(1, 0, 1234) g1 = &external_int; // CHECK: !DIDerivedType(tag: DW_TAG_LLVM_ptrauth_type, // CHECK-SAME: ptrAuthKey: 1, // CHECK-SAME: ptrAuthIsAddressDiscriminated: false, // CHECK-SAME: ptrAuthExtraDiscriminator: 1234, // CHECK-SAME: ptrAuthIsaPointer: false, // CHECK-SAME: ptrAuthAuthenticatesNullValues: false) struct A { int value; }; struct A *createA(void); void f() { __block struct A *__ptrauth(0, 1, 1236) ptr = createA(); ^{ (void)ptr->value; }(); } // CHECK: !DIDerivedType(tag: DW_TAG_LLVM_ptrauth_type, // CHECK-NOT: ptrAuthKey // CHECK-SAME: ptrAuthIsAddressDiscriminated: true, // CHECK-SAME: ptrAuthExtraDiscriminator: 1236, // CHECK-SAME: ptrAuthIsaPointer: false, // CHECK-SAME: ptrAuthAuthenticatesNullValues: false)