Fix clang-15 warnings

This commit is contained in:
greg7mdp
2022-11-19 14:25:19 -05:00
parent ab663358bc
commit d676385fb4
4 changed files with 13 additions and 69 deletions
+8 -15
View File
@@ -60,6 +60,7 @@
#include <cstring> #include <cstring>
#include <limits> #include <limits>
#include <new> #include <new>
#include <type_traits>
#include "phmap_fwd_decl.h" #include "phmap_fwd_decl.h"
#include "phmap_base.h" #include "phmap_base.h"
@@ -76,14 +77,6 @@
namespace phmap { namespace phmap {
// Defined and documented later on in this file.
template <typename T>
struct is_trivially_destructible;
// Defined and documented later on in this file.
template <typename T>
struct is_trivially_move_assignable;
namespace type_traits_internal { namespace type_traits_internal {
// Silence MSVC warnings about the destructor being defined as deleted. // Silence MSVC warnings about the destructor being defined as deleted.
@@ -107,25 +100,25 @@ namespace phmap {
: std::integral_constant< : std::integral_constant<
bool, std::is_move_constructible< bool, std::is_move_constructible<
type_traits_internal::SingleMemberUnion<T>>::value && type_traits_internal::SingleMemberUnion<T>>::value &&
phmap::is_trivially_destructible<T>::value> {}; std::is_trivially_destructible<T>::value> {};
template <class T> template <class T>
struct IsTriviallyCopyConstructibleObject struct IsTriviallyCopyConstructibleObject
: std::integral_constant< : std::integral_constant<
bool, std::is_copy_constructible< bool, std::is_copy_constructible<
type_traits_internal::SingleMemberUnion<T>>::value && type_traits_internal::SingleMemberUnion<T>>::value &&
phmap::is_trivially_destructible<T>::value> {}; std::is_trivially_destructible<T>::value> {};
template <class T> template <class T>
struct IsTriviallyMoveAssignableReference : std::false_type {}; struct IsTriviallyMoveAssignableReference : std::false_type {};
template <class T> template <class T>
struct IsTriviallyMoveAssignableReference<T&> struct IsTriviallyMoveAssignableReference<T&>
: phmap::is_trivially_move_assignable<T>::type {}; : std::is_trivially_move_assignable<T>::type {};
template <class T> template <class T>
struct IsTriviallyMoveAssignableReference<T&&> struct IsTriviallyMoveAssignableReference<T&&>
: phmap::is_trivially_move_assignable<T>::type {}; : std::is_trivially_move_assignable<T>::type {};
} // namespace type_traits_internal } // namespace type_traits_internal
@@ -155,10 +148,10 @@ namespace phmap {
public: public:
static constexpr bool kValue = static constexpr bool kValue =
(__has_trivial_copy(ExtentsRemoved) || !kIsCopyOrMoveConstructible) && (std::is_trivially_copyable<ExtentsRemoved>::value || !kIsCopyOrMoveConstructible) &&
(__has_trivial_assign(ExtentsRemoved) || !kIsCopyOrMoveAssignable) && (std::is_trivially_copy_assignable<ExtentsRemoved>::value || !kIsCopyOrMoveAssignable) &&
(kIsCopyOrMoveConstructible || kIsCopyOrMoveAssignable) && (kIsCopyOrMoveConstructible || kIsCopyOrMoveAssignable) &&
is_trivially_destructible<ExtentsRemoved>::value && std::is_trivially_destructible<ExtentsRemoved>::value &&
// We need to check for this explicitly because otherwise we'll say // We need to check for this explicitly because otherwise we'll say
// references are trivial copyable when compiled by MSVC. // references are trivial copyable when compiled by MSVC.
!std::is_reference<ExtentsRemoved>::value; !std::is_reference<ExtentsRemoved>::value;
+4 -26
View File
@@ -223,29 +223,6 @@ struct disjunction<> : std::false_type {};
template <typename T> template <typename T>
struct negation : std::integral_constant<bool, !T::value> {}; struct negation : std::integral_constant<bool, !T::value> {};
template <typename T>
struct is_trivially_destructible
: std::integral_constant<bool, __has_trivial_destructor(T) &&
std::is_destructible<T>::value> {};
template <typename T>
struct is_trivially_default_constructible
: std::integral_constant<bool, __has_trivial_constructor(T) &&
std::is_default_constructible<T>::value &&
is_trivially_destructible<T>::value> {};
template <typename T>
struct is_trivially_copy_constructible
: std::integral_constant<bool, __has_trivial_copy(T) &&
std::is_copy_constructible<T>::value &&
is_trivially_destructible<T>::value> {};
template <typename T>
struct is_trivially_copy_assignable
: std::integral_constant<
bool, __has_trivial_assign(typename std::remove_reference<T>::type) &&
phmap::is_copy_assignable<T>::value> {};
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// C++14 "_t" trait aliases // C++14 "_t" trait aliases
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
@@ -1808,9 +1785,10 @@ protected:
// Also, we should be checking is_trivially_copyable here, which is not // Also, we should be checking is_trivially_copyable here, which is not
// supported now, so we use is_trivially_* traits instead. // supported now, so we use is_trivially_* traits instead.
template <typename T, template <typename T,
bool unused = phmap::is_trivially_copy_constructible<T>::value&& bool unused =
phmap::is_trivially_copy_assignable<typename std::remove_cv< std::is_trivially_copy_constructible<T>::value &&
T>::type>::value&& std::is_trivially_destructible<T>::value> std::is_trivially_copy_assignable<typename std::remove_cv<T>::type>::value &&
std::is_trivially_destructible<T>::value>
class optional_data; class optional_data;
// Trivially copyable types // Trivially copyable types
-27
View File
@@ -148,33 +148,6 @@
#define PHMAP_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) 0 #define PHMAP_INTERNAL_HAVE_MIN_CLANG_VERSION(x, y) 0
#endif #endif
// ----------------------------------------------------------------
// Checks whether `std::is_trivially_destructible<T>` is supported.
// ----------------------------------------------------------------
#ifdef PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE
#error PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE cannot be directly set
#elif defined(_LIBCPP_VERSION) || defined(_MSC_VER) || \
(!defined(__clang__) && defined(__GNUC__) && defined(__GLIBCXX__) && PHMAP_INTERNAL_HAVE_MIN_GNUC_VERSION(4, 8))
#define PHMAP_HAVE_STD_IS_TRIVIALLY_DESTRUCTIBLE 1
#endif
// --------------------------------------------------------------
// Checks whether `std::is_trivially_default_constructible<T>` is
// supported.
// --------------------------------------------------------------
#if defined(PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE)
#error PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE cannot be directly set
#elif defined(PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE)
#error PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE cannot directly set
#elif (defined(__clang__) && defined(_LIBCPP_VERSION)) || \
(!defined(__clang__) && defined(__GNUC__) && \
PHMAP_INTERNAL_HAVE_MIN_GNUC_VERSION(5, 1) && \
(defined(_LIBCPP_VERSION) || defined(__GLIBCXX__))) || \
(defined(_MSC_VER) && !defined(__NVCC__))
#define PHMAP_HAVE_STD_IS_TRIVIALLY_CONSTRUCTIBLE 1
#define PHMAP_HAVE_STD_IS_TRIVIALLY_ASSIGNABLE 1
#endif
// ------------------------------------------------------------------- // -------------------------------------------------------------------
// Checks whether C++11's `thread_local` storage duration specifier is // Checks whether C++11's `thread_local` storage duration specifier is
// supported. // supported.
+1 -1
View File
@@ -418,7 +418,7 @@ namespace {
}; };
template <typename T, typename V> template <typename T, typename V>
void DoTest(const char *name, T *b, const std::vector<V> &values) { void DoTest(const char *, T *b, const std::vector<V> &values) {
typename KeyOfValue<typename T::key_type, V>::type key_of_value; typename KeyOfValue<typename T::key_type, V>::type key_of_value;
T &mutable_b = *b; T &mutable_b = *b;