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 <[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
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