blob: 201ca00ebdbb8c920c49a9beb20a180b2e7c9b19 [file] [log] [blame]
/* { dg-additional-options "-Wno-stringop-overflow"} */
/* -Wstringop-overflow= triggers on test5. */
#include <stdint.h>
#include <stdlib.h>
void test1 (void)
{
int32_t buf[1];
/* Zero bytes written on non-zero allocation. */
__builtin_memset (buf, 0, 0);
}
void test2 (void)
{
/* ISO C forbids zero-size arrays but GCC compiles this to an
zero-sized array without -Wpedantic. */
int32_t buf[0];
/* Write on zero capacity. */
__builtin_memset (buf, 0, sizeof (int32_t)); /* { dg-line test2 } */
/* { dg-warning "overflow" "warning" { target *-*-* } test2 } */
/* { dg-message "from byte 0 till byte 3" "final event" { target *-*-* } test2 } */
}
void test3 (void)
{
int32_t buf[0];
/* Zero bytes written on zero capacity. */
__builtin_memset (buf, 0, 0);
}
void test4 (void)
{
int32_t *buf = malloc (sizeof (int32_t));
if (!buf)
return;
/* Zero bytes written on non-zero allocation. */
__builtin_memset (buf, 0, 0);
free (buf);
}
void test5 (void)
{
int32_t *buf = malloc (0);
if (!buf)
return;
/* Write on zero capacity. */
__builtin_memset (buf, 0, sizeof (int32_t)); /* { dg-line test5 } */
free (buf);
/* { dg-warning "overflow" "warning" { target *-*-* } test5 } */
/* { dg-message "from byte 0 till byte 3" "final event" { target *-*-* } test5 } */
}
void test6 (void)
{
int32_t *buf = malloc (0);
if (!buf)
return;
/* Zero bytes written on zero capacity. */
__builtin_memset (buf, 0, 0);
free (buf);
}