------- Additional Comments From baldrick at free dot fr 2005-01-14 08:59 ------- Subject: Re: New: ACATS CXA4009, CXA4020 - valgrind detects bad code (overlapping memcpy)
Here is a much simplified version: > gnatmake -s -g -O2 tt > valgrind --tool=memcheck ./tt ==10048== Memcheck, a memory error detector for x86-linux. ==10048== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al. ==10048== Using valgrind-2.3.0.CVS, a program supervision framework for x86-linux. ==10048== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al. ==10048== For more details, rerun with: -v ==10048== ==10048== Source and destination overlap in memcpy(0x52BFDE84, 0x52BFDE85, 2) ==10048== at 0x1B906815: memcpy (mac_replace_strmem.c:113) ==10048== by 0x80496F9: ss(short, long, int, double,...) (ss.adb:5) ==10048== by 0x804978C: _ada_tt (tt.adb:9) ==10048== by 0x8049634: main (b~tt.adb:112) ==10048== ==10048== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 11 from 1) ==10048== malloc/free: in use at exit: 10280 bytes in 2 blocks. ==10048== malloc/free: 2 allocs, 0 frees, 10280 bytes allocated. ==10048== For a detailed leak analysis, rerun with: --leak-check=yes ==10048== For counts of detected errors, rerun with: -v package SS is type Super_String (Length : Positive) is record Data : String (1 .. Length); end record; procedure Slide (Source : in out Super_String); end SS; package body SS is procedure Slide (Source : in out Super_String) is begin Source.Data (1 .. Source.Length - 1) := Source.Data (2 .. Source.Length); end; end SS; with SS; use SS; procedure TT is S : Super_String := ( Length => 3, Data => "ABC" ); begin Slide (S); end; -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19419