| /* PR libstdc++/88101 */ |
| |
| struct S {} s1, s2; |
| struct T : public S { char a; short b; char c; } t1, t2; |
| struct U : public T { char d; long long e; char f; } u1, u2; |
| |
| __attribute__((noipa)) void |
| foo (T *t, U *u) |
| { |
| int i; |
| t->a = -1; t->b = -1; t->c = -1; |
| u->a = -1; u->b = -1; u->c = -1; u->d = -1; u->e = -1; u->f = -1; |
| } |
| |
| int |
| main () |
| { |
| __builtin_memset (&s2, -1, sizeof (s2)); |
| __builtin_memset (&t2, -1, sizeof (t2)); |
| __builtin_memset (&u2, -1, sizeof (u2)); |
| foo (&t1, &u1); |
| foo (&t2, &u2); |
| __builtin_clear_padding (&s2); |
| __builtin_clear_padding (&t2); |
| __builtin_clear_padding (&u2); |
| if (__builtin_memcmp (&s1, &s2, sizeof (s1)) |
| || __builtin_memcmp (&t1, &t2, sizeof (t1)) |
| || __builtin_memcmp (&u1, &u2, sizeof (u1))) |
| __builtin_abort (); |
| return 0; |
| } |