On Thu, 23 Nov 2023, Jakub Jelinek wrote: > On Thu, Nov 23, 2023 at 08:00:49AM +0000, Richard Biener wrote: > > The following amends the cpymem documentation to mention that exact > > overlap needs to be handled gracefully, also noting that the target > > runtime is expected to behave the same way. > > > > OK? > > > > Thanks, > > Richard. > > > > PR middle-end/32667 > > * md.texi (cpymem): Document that exact overlap of source > > and destination needs to work. Mention the target runtime > > may not treat this case as undefined. > > The first added sentence is ok, for the second see the spot > Florian mentioned in the PR.
Like this? Thanks, Richard. >From 93f4d22374ad2ea8bb5821083d2422c8b0a3313b Mon Sep 17 00:00:00 2001 From: Richard Biener <[email protected]> Date: Thu, 23 Nov 2023 08:54:56 +0100 Subject: [PATCH] middle-end/32667 - document cpymem and memcpy exact overlap requirement To: [email protected] The following amends the cpymem documentation to mention that exact overlap needs to be handled gracefully, also noting that the target runtime is expected to behave the same way where -ffreestanding docs mention the set of routines required. PR middle-end/32667 * md.texi (cpymem): Document that exact overlap of source and destination needs to work. * standards.texi (ffreestanding): Mention memcpy is required to handle the exact overlap case. --- gcc/doc/md.texi | 5 +++-- gcc/doc/standards.texi | 4 +++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index df6725ffc9c..87e1c9ed20e 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -6915,8 +6915,9 @@ individually copied data units in the block. The @code{cpymem@var{m}} patterns need not give special consideration to the possibility that the source and destination strings might -overlap. These patterns are used to do inline expansion of -@code{__builtin_memcpy}. +overlap. An exeption is the case where source and destination are +equal, this case needs to be handled correctly. +These patterns are used to do inline expansion of @code{__builtin_memcpy}. @cindex @code{movmem@var{m}} instruction pattern @item @samp{movmem@var{m}} diff --git a/gcc/doc/standards.texi b/gcc/doc/standards.texi index 4eb43f14f90..6eebb9426f3 100644 --- a/gcc/doc/standards.texi +++ b/gcc/doc/standards.texi @@ -184,7 +184,9 @@ GNU C library). @xref{Standard Libraries,,Standard Libraries}. Most of the compiler support routines used by GCC are present in @file{libgcc}, but there are a few exceptions. GCC requires the freestanding environment provide @code{memcpy}, @code{memmove}, -@code{memset} and @code{memcmp}. +@code{memset} and @code{memcmp}. Contrary to the standards +covering @code{memcpy} GCC expects the case of an exact overlap +of source and destination to work and not invoke undefined behavior. Finally, if @code{__builtin_trap} is used, and the target does not implement the @code{trap} pattern, then GCC emits a call to @code{abort}. -- 2.35.3
