[Bug c++/32667] New: builtin operator= generates memcpy with overlapping memory regions
Raimund dot Merkert at baesystems dot com
gcc-bugzilla@gcc.gnu.org
Sat Jul 7 17:55:00 GMT 2007
This code generates a warning when run with valgrind:
#include <vector>
using namespace ::std;
struct X {
double values[10];
};
int main()
{
vector<X> x;
x.push_back(X());
for (vector<X>::iterator i=x.begin();i!=x.end();++i) {
*i = *(x.end()-1);
}
return 0;
}
g++ test.cpp -o foo -O3
Valgrind error:
valgrind --tool=memcheck foo
==24513== Memcheck, a memory error detector for x86-linux.
==24513== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
==24513== Using valgrind-2.2.0, a program supervision framework for x86-linux.
==24513== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al.
==24513== For more details, rerun with: -v
==24513==
==24513== Source and destination overlap in memcpy(0x1BB68028, 0x1BB68028, 80)
==24513== at 0x1B9057E5: memcpy (in /usr/lib/valgrind/vgpreload_memcheck.so)
==24513== by 0x8048696: main (in /home/ray/tmp/foo)
==24513==
==24513== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 17 from 1)
==24513== malloc/free: in use at exit: 0 bytes in 0 blocks.
==24513== malloc/free: 1 allocs, 1 frees, 80 bytes allocated.
==24513== For a detailed leak analysis, rerun with: --leak-check=yes
==24513== For counts of detected errors, rerun with: -v
On my machine "man memcpy" says "...The memory areas may not overlap. Use
memmove(3) if the memory areas do overlap. ..."
--
Summary: builtin operator= generates memcpy with overlapping
memory regions
Product: gcc
Version: 4.2.0
Status: UNCONFIRMED
Severity: major
Priority: P3
Component: c++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: Raimund dot Merkert at baesystems dot com
GCC host triplet: i686-pc-linux-gnu
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=32667
More information about the Gcc-bugs
mailing list