This is the mail archive of the
mailing list for the libstdc++ project.
Re: [PATCH] Use __builtin_memmove for trivially copy assignable types
- From: Glen Fernandes <glen dot fernandes at gmail dot com>
- To: jwakely at redhat dot com
- Cc: ville dot voutilainen at gmail dot com, gcc-patches at gcc dot gnu dot org, libstdc++ at gcc dot gnu dot org
- Date: Thu, 19 Jul 2018 10:01:48 -0400
- Subject: Re: [PATCH] Use __builtin_memmove for trivially copy assignable types
- References: <CAHVPgz=BsNLPv-Q=uvbF2L8qw1hG3mhJFpU1uudYURddxpxP-Q@mail.gmail.com> <alpine.DEB.firstname.lastname@example.org> <CAFk2RUbAjawC2uAYJig=t9CmZ8DyF3-r-8D8M3YUWBDdrH70QA@mail.gmail.com> <CAHVPgz=j8jVWsK2RcioWTR0b40tyEiiEYDT=fqE7Bfea00oDoQ@mail.gmail.com> <CAHVPgzkOWEpKpS8EDELB2AjKWa=bbZiGs0XOyC-jWAPL_dJevQ@mail.gmail.com> <20180719132522.GK14057@redhat.com>
On Thu, Jul 19, 2018 at 9:25 AM Jonathan Wakely <email@example.com> wrote:
> Sorry for the delay in reviewing this properly, as I've only just
> realised that this introduces undefined behaviour, doesn't it?
> It's undefined to use memmove for a type that is not trivially
> copyable. All trivial types are trivially copyable, so __is_trivial
> was too conservative, but safe (IIRC we used it because there was no
> __is_trivially_copyable trait at the time, so __is_trivial was the
> best we had).
> There are types which are trivially assignable but not trivially
> copyable, and it's undefined to use memmove for such types.
I was still unclear about that, but I forwarded you an e-mail from
Marshall with his answer when I asked whether libc++'s use of
TriviallyCopyAssignable here was incorrect. Let me know if it applies
here, and if not (and that interpretation of the standard is
incorrect), I'll update the patch to do as you suggest and run the