struct A {
    int i, j;
    char pad[512];
} a;

int __attribute__((noinline))
foo(void) {
    __builtin_memset(&a, 0x26, sizeof a);
    return a.i;
}

void __attribute__((noinline))
bar(void) {
    __builtin_memset(&a, 0x36, sizeof a);
    a.i = 0x36363636;
    a.j = 0x36373636;
}

int main(void) {
    int i;
    if (sizeof(int) != 4 || __CHAR_BIT__ != 8)
        return 0;

    if (foo() != 0x26262626)
        __builtin_abort();
    for (i = 0; i < sizeof a; i++)
        if (((char *)&a)[i] != 0x26)
            __builtin_abort();

    bar();
    if (a.j != 0x36373636)
        __builtin_abort();
    a.j = 0x36363636;
    for (i = 0; i < sizeof a; i++)
        if (((char *)&a)[i] != 0x36)
            __builtin_abort();
    return 0;
}
