[Bug libstdc++/93059] char and char8_t does not talk with each other with memcpy. std::copy std::copy_n, std::fill, std::fill_n, std::uninitialized_copy std::uninitialized_copy_n, std::fill, std::uninitialized_fill_n fails to convert to memxxx functions

glisse at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Dec 24 10:01:00 GMT 2019


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93059

--- Comment #7 from Marc Glisse <glisse at gcc dot gnu.org> ---
(In reply to fdlbxtqi from comment #6)
> > > clearly incorrect
> > 
> > Please distinguish between what is wrong (generated code crashes, or returns
> > 3 instead of 2), and what is suboptimal.
> 
> Suppose #ifdef __cpp_lib_is_constant_evaluated is not defined (for C++17)
> 
> It becomes:
>         return __builtin_memmove(__dst, __src, sizeof(_Tp) * __num);
>       return __dst;
> 
> ?????

I should have kept the whole quote:

> 1. libstdc++ does not use memmove for different trivially copyable objects. It only uses it for the same type which is clearly incorrect.


More information about the Gcc-bugs mailing list