brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 9cdb98e Raw
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