From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9705 invoked by alias); 7 Jul 2007 17:55:34 -0000 Received: (qmail 9666 invoked by uid 48); 7 Jul 2007 17:55:23 -0000 Date: Sat, 07 Jul 2007 17:55:00 -0000 Subject: [Bug c++/32667] New: builtin operator= generates memcpy with overlapping memory regions X-Bugzilla-Reason: CC Message-ID: Reply-To: gcc-bugzilla@gcc.gnu.org To: gcc-bugs@gcc.gnu.org From: "Raimund dot Merkert at baesystems dot com" Mailing-List: contact gcc-bugs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-bugs-owner@gcc.gnu.org X-SW-Source: 2007-07/txt/msg00858.txt.bz2 This code generates a warning when run with valgrind: #include using namespace ::std; struct X { double values[10]; }; int main() { vector x; x.push_back(X()); for (vector::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