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