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.
This commit is contained in:
Richard Biener 2023-11-23 08:54:56 +01:00
parent 6ce952188a
commit 7758cb4b53
2 changed files with 6 additions and 3 deletions

View File

@ -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}}

View File

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