brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.6 KiB · fc90f5f Raw
91 lines · plain
1// RUN: %clang_cc1 -O0 -Wobjc-root-class -fptrauth-intrinsics -fptrauth-calls -nostdsysteminc -triple arm64e-apple-ios -emit-llvm -fptrauth-objc-interface-sel -o - %s | FileCheck --check-prefix=CHECK-AUTHENTICATED-SEL %s2// RUN: %clang_cc1 -O0 -Wobjc-root-class -fptrauth-intrinsics -fptrauth-calls -nostdsysteminc -triple arm64e-apple-ios -emit-llvm -o - %s | FileCheck --check-prefix=CHECK-UNAUTHENTICATED-SEL %s3 4#include <ptrauth.h>5#define __ptrauth_objc_sel_override                 \6  __ptrauth(ptrauth_key_objc_sel_pointer, 1, 22467)7 8extern "C" {9 10@interface Test {11@public12  SEL auto_sel;13@public14  const SEL const_auto_sel;15@public16  volatile SEL volatile_auto_sel;17@public18  SEL __ptrauth_objc_sel_override manual;19@public20  const SEL __ptrauth_objc_sel_override const_manual;21@public22  volatile SEL __ptrauth_objc_sel_override volatile_manual;23}24 25@end26#if __has_feature(ptrauth_objc_interface_sel)27typedef const SEL __ptrauth_objc_sel const_auto_sel_ptr_type;28const_auto_sel_ptr_type *const_auto_sel_ptr_type_test;29typedef volatile SEL __ptrauth_objc_sel volatile_auto_sel_ptr_type;30volatile_auto_sel_ptr_type *volatile_auto_sel_ptr_type_test;31#else32typedef const SEL const_auto_sel_ptr_type;33const_auto_sel_ptr_type *const_auto_sel_ptr_type_test;34typedef volatile SEL volatile_auto_sel_ptr_type;35volatile_auto_sel_ptr_type *volatile_auto_sel_ptr_type_test;36#endif37 38void auto_sel(Test *out, Test *in) {39  out->auto_sel = in->auto_sel;40}41// CHECK-AUTHENTICATED-SEL: define void @auto_sel42// CHECK-AUTHENTICATED-SEL: [[DST_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_DST_ADDR:%.*]], i64 22466)43// CHECK-AUTHENTICATED-SEL: [[CAST_SRC_ADDR:%.*]] = ptrtoint ptr [[SRC_ADDR:%.*]] to i6444// CHECK-AUTHENTICATED-SEL: [[SRC_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_SRC_ADDR]], i64 22466)45// CHECK-AUTHENTICATED-SEL: [[SRC_SEL:%.*]] = ptrtoint ptr [[SRC_SEL_ADDR:%.*]] to i6446// CHECK-AUTHENTICATED-SEL: {{%.*}} = call i64 @llvm.ptrauth.resign(i64 [[SRC_SEL]], i32 3, i64 [[DST_DESCRIMINATOR]], i32 3, i64 [[SRC_DESCRIMINATOR]])47 48// CHECK-UNAUTHENTICATED-SEL: define void @auto_sel49SEL const_auto_sel(Test *in) {50  const_auto_sel_ptr_type_test = &in->const_auto_sel;51  return in->const_auto_sel;52}53 54// CHECK-AUTHENTICATED-SEL: define ptr @const_auto_sel55// CHECK-AUTHENTICATED-SEL: {{%.*}} = call i64 @llvm.ptrauth.blend(i64 {{%.*}}, i64 22466)56// CHECK-AUTHENTICATED-SEL: {{%.*}} = ptrtoint ptr {{%.*}} to i6457// CHECK-AUTHENTICATED-SEL: [[AUTHENTICATED:%.*]] = call i64 @llvm.ptrauth.auth(i64 {{%.*}}, i32 3, i64 {{%.*}})58// CHECK-AUTHENTICATED-SEL: [[RESULT:%.*]] = inttoptr i64 [[AUTHENTICATED]] to ptr59 60void volatile_auto_sel(Test *out, Test *in) {61  volatile_auto_sel_ptr_type_test = &in->volatile_auto_sel;62  out->volatile_auto_sel = in->volatile_auto_sel;63}64 65// CHECK-AUTHENTICATED-SEL: define void @volatile_auto_sel66// CHECK-AUTHENTICATED-SEL: [[DST_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_DST_ADDR:%.*]], i64 22466)67// CHECK-AUTHENTICATED-SEL: [[CAST_SRC_ADDR:%.*]] = ptrtoint ptr [[SRC_ADDR:%.*]] to i6468// CHECK-AUTHENTICATED-SEL: [[SRC_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_SRC_ADDR]], i64 22466)69// CHECK-AUTHENTICATED-SEL: [[SRC_SEL:%.*]] = ptrtoint ptr [[SRC_SEL_ADDR:%.*]] to i6470// CHECK-AUTHENTICATED-SEL: {{%.*}} = call i64 @llvm.ptrauth.resign(i64 [[SRC_SEL]], i32 3, i64 [[DST_DESCRIMINATOR]], i32 3, i64 [[SRC_DESCRIMINATOR]])71 72void manual(Test *out, Test *in) {73  out->manual = in->manual;74}75 76// CHECK-AUTHENTICATED-SEL: define void @manual77// CHECK-AUTHENTICATED-SEL: [[DST_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_DST_ADDR:%.*]], i64 22467)78// CHECK-AUTHENTICATED-SEL: [[CAST_SRC_ADDR:%.*]] = ptrtoint ptr [[SRC_ADDR:%.*]] to i6479// CHECK-AUTHENTICATED-SEL: [[SRC_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_SRC_ADDR]], i64 22467)80// CHECK-AUTHENTICATED-SEL: [[SRC_SEL:%.*]] = ptrtoint ptr [[SRC_SEL_ADDR:%.*]] to i6481// CHECK-AUTHENTICATED-SEL: {{%.*}} = call i64 @llvm.ptrauth.resign(i64 [[SRC_SEL]], i32 3, i64 [[DST_DESCRIMINATOR]], i32 3, i64 [[SRC_DESCRIMINATOR]])82 83// CHECK-UNAUTHENTICATED-SEL: define void @manual84// CHECK-UNAUTHENTICATED-SEL: [[DST_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_DST_ADDR:%.*]], i64 22467)85// CHECK-UNAUTHENTICATED-SEL: [[CAST_SRC_ADDR:%.*]] = ptrtoint ptr [[SRC_ADDR:%.*]] to i6486// CHECK-UNAUTHENTICATED-SEL: [[SRC_DESCRIMINATOR:%.*]] = call i64 @llvm.ptrauth.blend(i64 [[CAST_SRC_ADDR]], i64 22467)87// CHECK-UNAUTHENTICATED-SEL: [[SRC_SEL:%.*]] = ptrtoint ptr [[SRC_SEL_ADDR:%.*]] to i6488// CHECK-UNAUTHENTICATED-SEL: {{%.*}} = call i64 @llvm.ptrauth.resign(i64 [[SRC_SEL]], i32 3, i64 [[DST_DESCRIMINATOR]], i32 3, i64 [[SRC_DESCRIMINATOR]])89 90}91