// RUN: %clang_cc1 -triple aarch64-linux -fexperimental-pointer-field-protection-abi -fexperimental-pointer-field-protection-tagged -emit-llvm -o - %s | FileCheck %s struct S { int* ptr1; __attribute__((no_field_protection)) int* ptr2; private: int private_data; }; // Not Standard-layout, mixed access // CHECK-LABEL: load_pointers_without_no_field_protection int* load_pointers_without_no_field_protection(S *t) { return t->ptr1; } // CHECK: call {{.*}} @llvm.protected.field.ptr.p0{{.*}} // CHECK-LABEL: load_pointers_with_no_field_protection int* load_pointers_with_no_field_protection(S *t) { return t->ptr2; } // CHECK-NOT: call {{.*}} @llvm.protected.field.ptr.p0{{.*}} // CHECK-LABEL: store_pointers_without_no_field_protection void store_pointers_without_no_field_protection(S *t, int *input) { t->ptr1 = input; } // CHECK: call {{.*}} @llvm.protected.field.ptr.p0{{.*}} // CHECK-LABEL: store_pointers_with_no_field_protection void store_pointers_with_no_field_protection(S *t, int *input) { t->ptr2 = input; } // CHECK-NOT: call {{.*}} @llvm.protected.field.ptr.p0{{.*}}