diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index df6725ffc9c..536ce997f01 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 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}.