Fix build on gcc < 5 (std::is_trivially_copyable missing)
Ref: https://sourceware.org/ml/gdb-patches/2017-04/msg00660.html Simply skip the poisoning on older compilers. gdb/ChangeLog: 2017-04-25 Pedro Alves <palves@redhat.com> * common/poison.h [!HAVE_IS_TRIVIALLY_COPYABLE] (IsRelocatable) (BothAreRelocatable, memcopy, memmove): Don't define. * common/traits.h (__has_feature, HAVE_IS_TRIVIALLY_COPYABLE): New macros.
This commit is contained in:
parent
d28b6364b1
commit
debed3db48
|
@ -1,3 +1,10 @@
|
||||||
|
2017-04-25 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* common/poison.h [!HAVE_IS_TRIVIALLY_COPYABLE] (IsRelocatable)
|
||||||
|
(BothAreRelocatable, memcopy, memmove): Don't define.
|
||||||
|
* common/traits.h (__has_feature, HAVE_IS_TRIVIALLY_COPYABLE): New
|
||||||
|
macros.
|
||||||
|
|
||||||
2017-04-25 Pedro Alves <palves@redhat.com>
|
2017-04-25 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
* common/common-defs.h: Include "common/poison.h".
|
* common/common-defs.h: Include "common/poison.h".
|
||||||
|
|
|
@ -55,6 +55,8 @@ template <typename T,
|
||||||
typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>>
|
typename = gdb::Requires<gdb::Not<IsMemsettable<T>>>>
|
||||||
void *memset (T *s, int c, size_t n) = delete;
|
void *memset (T *s, int c, size_t n) = delete;
|
||||||
|
|
||||||
|
#if HAVE_IS_TRIVIALLY_COPYABLE
|
||||||
|
|
||||||
/* Similarly, poison memcpy and memmove of non trivially-copyable
|
/* Similarly, poison memcpy and memmove of non trivially-copyable
|
||||||
types, which is undefined. */
|
types, which is undefined. */
|
||||||
|
|
||||||
|
@ -80,4 +82,6 @@ template <typename D, typename S,
|
||||||
typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
|
typename = gdb::Requires<gdb::Not<BothAreRelocatable<D, S>>>>
|
||||||
void *memmove (D *dest, const S *src, size_t n) = delete;
|
void *memmove (D *dest, const S *src, size_t n) = delete;
|
||||||
|
|
||||||
|
#endif /* HAVE_IS_TRIVIALLY_COPYABLE */
|
||||||
|
|
||||||
#endif /* COMMON_POISON_H */
|
#endif /* COMMON_POISON_H */
|
||||||
|
|
|
@ -20,6 +20,19 @@
|
||||||
|
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
|
|
||||||
|
/* GCC does not understand __has_feature. */
|
||||||
|
#if !defined(__has_feature)
|
||||||
|
# define __has_feature(x) 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* HAVE_IS_TRIVIALLY_COPYABLE is defined as 1 iff
|
||||||
|
std::is_trivially_copyable is available. GCC only implemented it
|
||||||
|
in GCC 5. */
|
||||||
|
#if (__has_feature(is_trivially_copyable) \
|
||||||
|
|| (defined __GNUC__ && __GNUC__ >= 5))
|
||||||
|
# define HAVE_IS_TRIVIALLY_COPYABLE 1
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace gdb {
|
namespace gdb {
|
||||||
|
|
||||||
/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See
|
/* Pre C++14-safe (CWG 1558) version of C++17's std::void_t. See
|
||||||
|
|
Loading…
Reference in New Issue