On Thu, Nov 23, 2023 at 08:13:47AM +0000, Richard Biener wrote:
> 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 <rguent...@suse.de>
> Date: Thu, 23 Nov 2023 08:54:56 +0100
> Subject: [PATCH] middle-end/32667 - document cpymem and memcpy exact overlap
>  requirement
> To: gcc-patches@gcc.gnu.org
> 
> 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

s/exeption/exception/

> +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}.

Ok with that typo fix.

        Jakub

Reply via email to