https://gcc.gnu.org/bugzilla/show_bug.cgi?id=20416
shri314 at yahoo dot com <shri314 at yahoo dot com> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |shri314 at yahoo dot com
--- Comment #7 from shri314 at yahoo dot com <shri314 at yahoo dot com> ---
Issue exists in 4.1.2 as well. And it can cause heap corruption from seemingly
mundane and regular pieces of code:
<snip>
#include <string>
std::string::size_type foo() {
const static std::string& bad = "r=";
return bad.size();
}
int main() {
foo();
foo();
}
</snip>
valgrind shows "invalid free"
-----------------------------
> ERROR SUMMARY: 5 errors from 3 contexts (suppressed: 18 from 9)
>
> 1 errors in context 1 of 3:
> Invalid free() / delete / delete[]
> at 0x40054B4: operator delete(void*) (vg_replace_malloc.c:346)
> by 0x4095C9C: std::string::_Rep::_M_destroy(std::allocator<char> const&)
> (in /usr/lib/libstdc++.so.6.0.8)
> by 0x804871B: foo() (basic_string.h:233)
> by 0x804875A: main (A.cpp:13)
> Address 0x410e028 is 0 bytes inside a block of size 15 free'd
> at 0x40054B4: operator delete(void*) (vg_replace_malloc.c:346)
> by 0x4095C9C: std::string::_Rep::_M_destroy(std::allocator<char> const&)
> (in /usr/lib/libstdc++.so.6.0.8)
> by 0x804871B: foo() (basic_string.h:233)