Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/Wstringop-overflow-31.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/Wstringop-overflow-31.c Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,40 @@ +/* PR middle-end/93646 - confusing -Wstringop-truncation on strncat where + -Wstringop-overflow is expected + { dg-do compile } + { dg-options "-O2 -Wall" } */ + +extern __SIZE_TYPE__ strlen (const char*); +extern char* strncat (char*, const char*, __SIZE_TYPE__); + + +char a[4]; + + +void f0 (char *d, const char *s) +{ + strncat (d, s, strlen (s)); // { dg-warning "specified bound depends on the length of the source argument" } + /* { dg-message "function 'f0'.*inlined from 'f1'" "inlining stack" { target *-*-* } 0 } */ + + // Prevent f0 from being replaced by g0. + *d = 'f'; +} + +void f1 (const char *s) +{ + f0 (a, s); +} + + +static void g0 (char *d, const char *s) +{ + strncat (d, s, strlen (s)); // { dg-warning "specified bound 3 equals source length" } + /* { dg-message "function 'g0'.*inlined from 'g1'" "inlining stack" { target *-*-* } 0 } */ + + // Prevent g0 from being replaced by f0. + *d = 'g'; +} + +void g1 (void) +{ + g0 (a, "123"); +}