[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
bernd.edlinger at hotmail dot de
gcc-bugzilla@gcc.gnu.org
Sun Dec 29 18:01:00 GMT 2019
- Previous message (by thread): [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
- Next message (by thread): [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
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93059
Bernd Edlinger <bernd.edlinger at hotmail dot de> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |bernd.edlinger at hotmail dot de
--- Comment #26 from Bernd Edlinger <bernd.edlinger at hotmail dot de> ---
(In reply to fdlbxtqi from comment #2)
> Also find a bug of __memmove
>
> /*
> * A constexpr wrapper for __builtin_memmove.
> * @param __num The number of elements of type _Tp (not bytes).
> */
> template<bool _IsMove, typename _Tp>
> _GLIBCXX14_CONSTEXPR
> inline void*
> __memmove(_Tp* __dst, const _Tp* __src, size_t __num)
> {
> #ifdef __cpp_lib_is_constant_evaluated
> if (std::is_constant_evaluated())
> {
> for(; __num > 0; --__num)
> {
> if constexpr (_IsMove)
> *__dst = std::move(*__src);
> else
> *__dst = *__src;
> ++__src;
> ++__dst;
> }
> return __dst;
> }
> else
> #endif
> return __builtin_memmove(__dst, __src, sizeof(_Tp) * __num);
> return __dst;
> }
>
> The last 2nd line return __dst is wrong. It should not exist.
Sorry, I don't know what this function is all about.
But to me the code in the ifdef looks totally bogus.
First it returns __dst+__num, while memmove is sopposed
to return __dst, and is is somehow clear that
__dst and __src do not overlap?
because if they do the loop would overwite the __dst buffer before
__src is fully copied?
- Previous message (by thread): [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
- Next message (by thread): [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
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the Gcc-bugs
mailing list