/* PR rtl-optimization/23561 */

struct A {
    char a1[1];
    char a2[5];
    char a3[1];
    char a4[2048 - 7];
} a;

typedef __SIZE_TYPE__ size_t;
extern void *memset(void *, int, size_t);
extern void *memcpy(void *, const void *, size_t);
extern int memcmp(const void *, const void *, size_t);
extern void abort(void);

void bar(struct A *x) {
    size_t i;
    if (memcmp(x, "\1HELLO\1", sizeof "\1HELLO\1"))
        abort();
    for (i = 0; i < sizeof(x->a4); i++)
        if (x->a4[i])
            abort();
}

int foo(void) {
    memset(&a, 0, sizeof(a));
    a.a1[0] = 1;
    memcpy(a.a2, "HELLO", sizeof "HELLO");
    a.a3[0] = 1;
    bar(&a);
    return 0;
}

int main(void) {
    foo();
    return 0;
}
