https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83869
Martin Sebor <msebor at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords| |diagnostic Depends on| |82609 --- Comment #2 from Martin Sebor <msebor at gcc dot gnu.org> --- The failing test cases are these two: $ cat -n gcc/testsuite/c-c++-common/attr-nonstring-3.c | grep "[[:space:]]25[07][[:space:]]" 250 T (stpncpy (arr, str, N + 1)); /* { dg-warning "writing 5 bytes into a region of size 4 overflows " } */ 257 T (stpncpy (p->arr, p->str, N + 1)); /* { dg-warning "writing 5 bytes into a region of size 4 overflows" } */ The following test case demonstrates the problem. The root cause is bug 82609: the extra set of parentheses around the stpncpy call suppresses the middle-end warnings in C++ (C is unaffected). $ cat pr83869.C && gcc -O2 -S -Wstringop-overflow pr83869.C #include <string.h> char a[4], b[4]; void sink (char*); void warn_overflow (void) { sink (stpncpy (a, b, sizeof a + 1)); // -Wstringop-overflow (good) } void bug_82609_missing_warn_overflow (void) { sink ((stpncpy (a, b, sizeof a + 1))); // missing -Wstringop-overflow } pr83869.C: In function ‘void warn_overflow()’: pr83869.C:9:8: warning: ‘char* stpncpy(char*, const char*, size_t)’ writing 5 bytes into a region of size 4 overflows the destination [-Wstringop-overflow=] sink (stpncpy (a, b, sizeof a + 1)); // -Wstringop-overflow (good) ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Referenced Bugs: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82609 [Bug 82609] missing -Warrray-bounds on an argument in parentheses