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