| // RUN: %clang_cc1 -triple aarch64-linux -fexperimental-pointer-field-protection-abi -fexperimental-pointer-field-protection-tagged -emit-llvm -o - %s | FileCheck %s | |
| int val; | |
| struct Pointer { | |
| int* ptr; | |
| private: | |
| int private_data; | |
| }; | |
| struct ArrayType { | |
| int* array[3]; | |
| private: | |
| int private_data; | |
| }; | |
| struct Array { | |
| ArrayType array; | |
| private: | |
| int private_data; | |
| }; | |
| struct Struct { | |
| Pointer ptr; | |
| }; | |
| // CHECK-LABEL: test_pointer | |
| Pointer test_pointer(Pointer t) { | |
| t.ptr = &val; | |
| return t; | |
| } | |
| // CHECK: call {{.*}} @llvm.protected.field.ptr.p0{{.*}} | |
| // CHECK-LABEL: test_struct | |
| int* test_struct(Struct *t) { | |
| return (t->ptr).ptr; | |
| } | |
| // CHECK: call {{.*}} @llvm.protected.field.ptr.p0{{.*}} |