[Bug middle-end/98465] Bogus warning stringop-overread wuth -std=gnu++20 -O2 and std::string::insert
romain.geissler at amadeus dot com
gcc-bugzilla@gcc.gnu.org
Wed Dec 30 13:22:59 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98465
--- Comment #3 from Romain Geissler <romain.geissler at amadeus dot com> ---
I have found another example in my code base raising this error:
#include <string>
std::string f1()
{
std::string aString = "string";
aString = "bigger str";
return aString;
}
With: -O2 -std=gnu++20 -Werror=stringop-overread -Wno-system-headers -g
raises:
/opt/compiler-explorer/gcc-trunk-20201230/include/c++/11.0.0/bits/char_traits.h:402:56:
error: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' reading
10 bytes from a region of size 7 [-Werror=stringop-overread]
402 | return static_cast<char_type*>(__builtin_memcpy(__s1, __s2,
__n));
|
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
Yet now what confuses me is that if I add copy of this function later using
bigger strings (so not exposing the bug), the new f2 function makes the warning
disappear form the f1 function:
#include <string>
std::string f1()
{
std::string aString = "string";
aString = "bigger str"; // <--- no more warning here when we have function
f2 !
return aString;
}
std::string f2()
{
std::string aString = "initial string with enough capacity";
aString = "smaller str";
return aString;
}
Why does having a function f2 affects warnings in function f1 ?
More information about the Gcc-bugs
mailing list