This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug middle-end/19410] Overlapping memcpy with big struct copies (ACATS c64106a)
- From: "baldrick at free dot fr" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: 13 Jan 2005 00:08:30 -0000
- Subject: [Bug middle-end/19410] Overlapping memcpy with big struct copies (ACATS c64106a)
- References: <20050112225244.19410.baldrick@free.fr>
- Reply-to: gcc-bugzilla at gcc dot gnu dot org
------- Additional Comments From baldrick at free dot fr 2005-01-13 00:08 -------
Subject: Re: Overlapping memcpy with big struct copies (ACATS c64106a)
On Thursday 13 January 2005 00:57, pinskia at gcc dot gnu dot org wrote:
>
> ------- Additional Comments From pinskia at gcc dot gnu dot org 2005-01-12 23:57 -------
> (In reply to comment #3)
> > Subject: Re: Overlapping memcpy with big struct copies (ACATS c64106a)
> > > If the source and destination are identical, does it matter if memcpy is
> > used? That said, ACATS tests cxa4009 and cxa4020 have overlapping memcpy's
> > where the source and destination are not identical (ACATS c95087a is the same
> > as c64106a: identical source and destination).
>
> Yes it does matter at least according to the C example. I was just reducing C64106A, the others are
> most likely a different problem.
Would you like me to file a separate report for them? Here is cxa4009 by the way:
RUN cxa4009
==19375== Memcheck, a memory error detector for x86-linux.
==19375== Copyright (C) 2002-2004, and GNU GPL'd, by Julian Seward et al.
==19375== Using valgrind-2.3.0.CVS, a program supervision framework for x86-linux.
==19375== Copyright (C) 2000-2004, and GNU GPL'd, by Julian Seward et al.
==19375== For more details, rerun with: -v
==19375==
,.,. CXA4009 ACATS 2.5 05-01-11 17:12:27
---- CXA4009 Check that the subprograms defined in package
Ada.Strings.Bounded are available, and that they produce
correct results, especially under conditions where
truncation of the result is required.
==19375== Source and destination overlap in memcpy(0x52BFC954, 0x52BFC956, 4)
==19375== at 0x1B906AC5: memcpy (mac_replace_strmem.c:113)
==19375== by 0x8055C72: ada__strings__superbounded__super_trim__4 (a-strsup.adb:1662)
==19375== by 0x8063C85: .827::cxa4009__test_block__b10__trim(void) (a-strbou.ads:790)
==19375== by 0x8065E81: _ada_cxa4009 (cxa4009.adb:351)
==19375==
==19375== Source and destination overlap in memcpy(0x52BFC954, 0x52BFC956, 6)
==19375== at 0x1B906AC5: memcpy (mac_replace_strmem.c:113)
==19375== by 0x8055C72: ada__strings__superbounded__super_trim__4 (a-strsup.adb:1662)
==19375== by 0x8063C85: .827::cxa4009__test_block__b10__trim(void) (a-strbou.ads:790)
==19375== by 0x8065F46: _ada_cxa4009 (cxa4009.adb:366)
==19375==
==19375== Source and destination overlap in memcpy(0x52BFC954, 0x52BFC956, 6)
==19375== at 0x1B906AC5: memcpy (mac_replace_strmem.c:113)
==19375== by 0x8055C72: ada__strings__superbounded__super_trim__4 (a-strsup.adb:1662)
==19375== by 0x8063C85: .827::cxa4009__test_block__b10__trim(void) (a-strbou.ads:790)
==19375== by 0x806600B: _ada_cxa4009 (cxa4009.adb:377)
==19375==
==19375== Source and destination overlap in memcpy(0x52BFC954, 0x52BFC958, 5)
==19375== at 0x1B906AC5: memcpy (mac_replace_strmem.c:113)
==19375== by 0x8055C72: ada__strings__superbounded__super_trim__4 (a-strsup.adb:1662)
==19375== by 0x8063C85: .827::cxa4009__test_block__b10__trim(void) (a-strbou.ads:790)
==19375== by 0x80660D0: _ada_cxa4009 (cxa4009.adb:387)
==== CXA4009 PASSED ============================.
==19375==
==19375== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 13 from 1)
==19375== malloc/free: in use at exit: 10280 bytes in 2 blocks.
==19375== malloc/free: 17 allocs, 15 frees, 12050 bytes allocated.
==19375== For a detailed leak analysis, rerun with: --leak-check=yes
==19375== For counts of detected errors, rerun with: -v
PASS: cxa4009
For the first error, the code in question is (a-strsup.adb):
1662 Source.Data (1 .. Source.Current_Length) :=
1663 Source.Data (First .. Last);
where Source.Current_Length = 4, First = 3 and Last = 6. So indeed the source
and destination overlap (these are strings). The code seems to perform a direct
call to memcpy.
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19410