61 lines · c
1// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics -fsyntax-only -verify=c,expected %s2// RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics -fsyntax-only -verify=c,expected %s3// RUN: %clang_cc1 -triple arm64-apple-ios -fptrauth-calls -fptrauth-intrinsics -fsyntax-only -x c++ -verify=cxx,expected %s4// RUN: %clang_cc1 -triple aarch64-linux-gnu -fptrauth-calls -fptrauth-intrinsics -fsyntax-only -x c++ -verify=cxx,expected %s5 6#if defined __cplusplus7extern "C" {8#endif9 10void *memset(void *, int, __SIZE_TYPE__);11void bzero(void *, __SIZE_TYPE__);12void *memcpy(void *, const void *, __SIZE_TYPE__);13void *memmove(void *, const void *, __SIZE_TYPE__);14 15#if defined __cplusplus16}17#endif18 19#define AQ __ptrauth(1,1,50)20#define IQ __ptrauth(1,0,50)21 22struct PtrAuthTrivial {23 int f0;24 int * IQ f1;25};26 27struct PtrAuthNonTrivial0 {28 int f0;29 int * AQ f1; // c-note 2 {{non-trivial to copy}}30 int f2;31};32 33struct PtrAuthNonTrivial1 {34 int * AQ f0; // c-note 2 {{non-trivial to copy}}35 int f1;36 struct PtrAuthNonTrivial0 f2;37};38 39void testPtrAuthTrivial(struct PtrAuthTrivial *d, struct PtrAuthTrivial *s) {40 memset(d, 0, sizeof(struct PtrAuthTrivial));41 memset(d, 1, sizeof(struct PtrAuthTrivial));42 bzero(d, sizeof(struct PtrAuthTrivial));43 memcpy(d, s, sizeof(struct PtrAuthTrivial));44 memmove(d, s, sizeof(struct PtrAuthTrivial));45}46 47void testPtrAuthNonTrivial1(struct PtrAuthNonTrivial1 *d,48 struct PtrAuthNonTrivial1 *s) {49 memset(d, 0, sizeof(struct PtrAuthNonTrivial1)); // cxx-warning {{is a pointer to non-trivially copyable type 'struct PtrAuthNonTrivial1'}} // cxx-note {{explicitly cast the pointer to silence}}50 memset(d, 1, sizeof(struct PtrAuthNonTrivial1)); // cxx-warning {{is a pointer to non-trivially copyable type 'struct PtrAuthNonTrivial1'}} // cxx-note {{explicitly cast the pointer to silence}}51 bzero(d, sizeof(struct PtrAuthNonTrivial1)); // cxx-warning {{is a pointer to non-trivially copyable type 'struct PtrAuthNonTrivial1'}} // cxx-note {{explicitly cast the pointer to silence}}52 memcpy(d, s, sizeof(struct PtrAuthNonTrivial1));53 // c-warning@-1 {{that is not trivial to primitive-copy}}54 // cxx-warning@-2 {{is a pointer to non-trivially copyable type 'struct PtrAuthNonTrivial1'}}55 // expected-note@-3 {{explicitly cast the pointer to silence}}56 memmove(d, s, sizeof(struct PtrAuthNonTrivial1));57 // c-warning@-1 {{that is not trivial to primitive-copy}}58 // cxx-warning@-2 {{is a pointer to non-trivially copyable type 'struct PtrAuthNonTrivial1'}}59 // expected-note@-3 {{explicitly cast the pointer to silence}}60}61