/* { dg-do compile } */
/* { dg-options "-O2 -Warray-bounds" } */

#include <string.h>
#include <assert.h>
#include <stdio.h>

static inline __attribute__((__artificial__)) void *a(char *c, const char *d, long n)
{
    return __builtin___memcpy_chk(c, d, n, __builtin_object_size(c, 0));
}
typedef struct {
    char *data;
    int len;
} sb_t;
const char __sb_slop[1];
static void inline set0(sb_t *c)
{
    if (c->data != __sb_slop)
        c->data[0] = 0;
    else
        assert (c->data[0] == 0);
}
char buf[5];
sb_t l = {
    .data = buf,
    .len = 0
};
void o()
{
    char *data = "abcd";
    sb_t h = l;
    set0(&h);
    a(h.data, data, strlen(data));
    printf("%s\n", h.data);
    printf("%d\n", h.data == __sb_slop);
    printf("%d\n", h.data == buf);
    set0(&h);
}
int main(void) {
    o();
    return 0;
}
