brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 174f328 Raw
87 lines · c
1// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics -emit-llvm %s  -o - | FileCheck %s2// RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics -emit-llvm %s  -o - | FileCheck %s3 4// Constant initializers for data pointers.5extern int external_int;6 7// CHECK: @g1 = global ptr ptrauth (ptr @external_int, i32 1, i64 56)8int * __ptrauth(1,0,56) g1 = &external_int;9 10// CHECK: @g2 = global ptr ptrauth (ptr @external_int, i32 1, i64 1272, ptr @g2)11int * __ptrauth(1,1,1272) g2 = &external_int;12 13// CHECK: @g3 = global ptr null14int * __ptrauth(1,1,871) g3 = 0;15 16// FIXME: should we make a ptrauth constant for this absolute symbol?17// CHECK: @g4 = global ptr inttoptr (i64 1230 to ptr)18int * __ptrauth(1,1,1902) g4 = (int*) 1230;19 20// CHECK: @ga = global [3 x ptr] [21// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 712, ptr @ga),22// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 712, ptr getelementptr inbounds ([3 x ptr], ptr @ga, i32 0, i32 1)),23// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 712, ptr getelementptr inbounds ([3 x ptr], ptr @ga, i32 0, i32 2))]24int * __ptrauth(1,1,712) ga[3] = { &external_int, &external_int, &external_int };25 26struct A {27  int * __ptrauth(1,0,431) f0;28  int * __ptrauth(1,0,9182) f1;29  int * __ptrauth(1,0,783) f2;30};31 32// CHECK: @gs1 = global %struct.A {33// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 431),34// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 9182),35// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 783) }36struct A gs1 = { &external_int, &external_int, &external_int };37 38struct B {39  int * __ptrauth(1,1,1276) f0;40  int * __ptrauth(1,1,23674) f1;41  int * __ptrauth(1,1,163) f2;42};43 44// CHECK: @gs2 = global %struct.B {45// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 1276, ptr @gs2),46// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 23674, ptr getelementptr inbounds (%struct.B, ptr @gs2, i32 0, i32 1)),47// CHECK-SAME: ptr ptrauth (ptr @external_int, i32 1, i64 163, ptr getelementptr inbounds (%struct.B, ptr @gs2, i32 0, i32 2)) }48struct B gs2 = { &external_int, &external_int, &external_int };49 50// Constant initializers for function pointers.51extern void external_function(void);52typedef void (*fpt)(void);53 54// CHECK: @f1 = global ptr ptrauth (ptr @external_function, i32 1, i64 56)55fpt __ptrauth(1,0,56) f1 = &external_function;56 57// CHECK: @f2 = global ptr ptrauth (ptr @external_function, i32 1, i64 1272, ptr @f2)58fpt __ptrauth(1,1,1272) f2 = &external_function;59 60// CHECK: @fa = global [3 x ptr] [61// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 712, ptr @fa),62// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 712, ptr getelementptr inbounds ([3 x ptr], ptr @fa, i32 0, i32 1)),63// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 712, ptr getelementptr inbounds ([3 x ptr], ptr @fa, i32 0, i32 2))]64fpt __ptrauth(1,1,712) fa[3] = { &external_function, &external_function, &external_function };65 66struct C {67  fpt __ptrauth(1,0,431) f0;68  fpt __ptrauth(1,0,9182) f1;69  fpt __ptrauth(1,0,783) f2;70};71// CHECK: @fs1 = global %struct.C {72// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 431),73// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 9182),74// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 783) }75struct C fs1 = { &external_function, &external_function, &external_function };76 77struct D {78  fpt __ptrauth(1,1,1276) f0;79  fpt __ptrauth(1,1,23674) f1;80  fpt __ptrauth(1,1,163) f2;81};82// CHECK: @fs2 = global %struct.D {83// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 1276, ptr @fs2),84// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 23674, ptr getelementptr inbounds (%struct.D, ptr @fs2, i32 0, i32 1)),85// CHECK-SAME: ptr ptrauth (ptr @external_function, i32 1, i64 163, ptr getelementptr inbounds (%struct.D, ptr @fs2, i32 0, i32 2)) }86struct D fs2 = { &external_function, &external_function, &external_function };87