aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-11-23 08:54:56 +0100
committerRichard Biener <rguenther@suse.de>2023-11-23 09:28:21 +0100
commit7758cb4b53e8a33642709402ce582f769eb9fd18 (patch)
tree09a86848b328f052ed664fbf4b8f921e0b14b328 /gcc
parent6ce952188ab39e303e4f63e474b5cba83b5b12fd (diff)
downloadgcc-7758cb4b53e8a33642709402ce582f769eb9fd18.zip
gcc-7758cb4b53e8a33642709402ce582f769eb9fd18.tar.gz
gcc-7758cb4b53e8a33642709402ce582f769eb9fd18.tar.bz2
middle-end/32667 - document cpymem and memcpy exact overlap requirement
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 * doc/md.texi (cpymem): Document that exact overlap of source and destination needs to work. * doc/standards.texi (ffreestanding): Mention memcpy is required to handle the exact overlap case.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/doc/md.texi5
-rw-r--r--gcc/doc/standards.texi4
2 files changed, 6 insertions, 3 deletions
diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi
index df6725f..536ce99 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 exception 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 4eb43f1..6eebb94 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}.