void test1 (void) { char buf[8]; __builtin___mempcpy_chk (buf, data, l1 ? sizeof (buf) : 4, __builtin_object_size (buf, 0)); if (__builtin___memmove_chk (buf, data, l1 ? sizeof (buf) : 4, __builtin_object_size (buf, 0)) != buf) __builtin_abort (); }
extern inline void * memmove (void *dest, const void *src, size_t len) { return __builtin___memmove_chk (dest, src, len, bos0 (dest)); }
void test_warn() { memset(&x1, 0, sizeof x1); // \ // expected-warning {{destination for this 'memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memset(&x2, 0, sizeof x2); // \ // expected-warning {{destination for this 'memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memmove(&x1, 0, sizeof x1); // \ // expected-warning{{destination for this 'memmove' call is a pointer to dynamic class 'struct X1'; vtable pointer will be overwritten}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memmove(0, &x1, sizeof x1); // \ // expected-warning{{source of this 'memmove' call is a pointer to dynamic class 'struct X1'; vtable pointer will be moved}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memcpy(&x1, 0, sizeof x1); // \ // expected-warning{{destination for this 'memcpy' call is a pointer to dynamic class 'struct X1'; vtable pointer will be overwritten}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memcpy(0, &x1, sizeof x1); // \ // expected-warning{{source of this 'memcpy' call is a pointer to dynamic class 'struct X1'; vtable pointer will be copied}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memcmp(&x1, 0, sizeof x1); // \ // expected-warning{{first operand of this 'memcmp' call is a pointer to dynamic class 'struct X1'; vtable pointer will be compared}} \ // expected-note {{explicitly cast the pointer to silence this warning}} memcmp(0, &x1, sizeof x1); // \ // expected-warning{{second operand of this 'memcmp' call is a pointer to dynamic class 'struct X1'; vtable pointer will be compared}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memset(&x1, 0, sizeof x1); // \ // expected-warning {{destination for this '__builtin_memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memset(&x2, 0, sizeof x2); // \ // expected-warning {{destination for this '__builtin_memset' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memmove(&x1, 0, sizeof x1); // \ // expected-warning{{destination for this '__builtin_memmove' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memmove(0, &x1, sizeof x1); // \ // expected-warning{{source of this '__builtin_memmove' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memcpy(&x1, 0, sizeof x1); // \ // expected-warning{{destination for this '__builtin_memcpy' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin_memcpy(0, &x1, sizeof x1); // \ // expected-warning{{source of this '__builtin_memcpy' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memset_chk(&x1, 0, sizeof x1, sizeof x1); // \ // expected-warning {{destination for this '__builtin___memset_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memset_chk(&x2, 0, sizeof x2, sizeof x2); // \ // expected-warning {{destination for this '__builtin___memset_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memmove_chk(&x1, 0, sizeof x1, sizeof x1); // \ // expected-warning{{destination for this '__builtin___memmove_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memmove_chk(0, &x1, sizeof x1, sizeof x1); // \ // expected-warning{{source of this '__builtin___memmove_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memcpy_chk(&x1, 0, sizeof x1, sizeof x1); // \ // expected-warning{{destination for this '__builtin___memcpy_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} __builtin___memcpy_chk(0, &x1, sizeof x1, sizeof x1); // \ // expected-warning{{source of this '__builtin___memcpy_chk' call is a pointer to dynamic class}} \ // expected-note {{explicitly cast the pointer to silence this warning}} }