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

Reply via email to