blob: ed74ebf19c32344f7661535639d0b87a3b186fb9 [file] [log] [blame]
// PR tree-optimization/102586
// { dg-do compile }
// { dg-options "-Wno-inaccessible-base" }
struct C0 {};
struct C1 {};
struct C2 : C1, virtual C0 {};
struct C3 : virtual C2, C1 {};
struct C4 : virtual C3, C1 {};
struct C5 : C4 {};
struct C6 { char c; };
struct C7 : virtual C6, virtual C3, C1 {};
struct C8 : C7 {};
void
foo (C0 *c0, C1 *c1, C2 *c2, C3 *c3, C4 *c4, C5 *c5, C6 *c6, C7 *c7, C8 *c8)
{
__builtin_clear_padding (c0);
__builtin_clear_padding (c1);
__builtin_clear_padding (c2); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C2\\\*'\\\)" }
__builtin_clear_padding (c3); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C3\\\*'\\\)" }
__builtin_clear_padding (c4); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C4\\\*'\\\)" }
__builtin_clear_padding (c5); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C5\\\*'\\\)" }
__builtin_clear_padding (c6);
__builtin_clear_padding (c7); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C7\\\*'\\\)" }
__builtin_clear_padding (c8); // { dg-error "argument 1 in call to function '__builtin_clear_padding' has pointer to a non-trivially-copyable type \\\('C8\\\*'\\\)" }
}
void
bar ()
{
C0 c0;
C1 c1;
C2 c2;
C3 c3;
C4 c4;
C5 c5;
C6 c6;
C7 c7;
C8 c8;
__builtin_clear_padding (&c0);
__builtin_clear_padding (&c1);
__builtin_clear_padding (&c2);
__builtin_clear_padding (&c3);
__builtin_clear_padding (&c4);
__builtin_clear_padding (&c5);
__builtin_clear_padding (&c6);
__builtin_clear_padding (&c7);
__builtin_clear_padding (&c8);
}