view gcc/testsuite/gcc.dg/pr89689.c @ 145:1830386684a0

gcc-9.2.0
author anatofuz
date Thu, 13 Feb 2020 11:34:05 +0900
parents
children
line wrap: on
line source

/* { 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;
}