mdbx: avoid paranoid CLANG's enum ops UB.

This commit is contained in:
Leonid Yuriev
2020-11-17 15:00:51 +03:00
parent 11fde67edc
commit 94fae97f88
4 changed files with 39 additions and 22 deletions

13
mdbx.h
View File

@@ -483,9 +483,18 @@ typedef mode_t mdbx_mode_t;
MDBX_CXX01_CONSTEXPR ENUM operator&(ENUM a, ENUM b) { \
return ENUM(std::size_t(a) & std::size_t(b)); \
} \
MDBX_CXX01_CONSTEXPR ENUM operator&(ENUM a, size_t b) { \
return ENUM(std::size_t(a) & b); \
} \
MDBX_CXX01_CONSTEXPR ENUM operator&(size_t a, ENUM b) { \
return ENUM(a & std::size_t(b)); \
} \
MDBX_CXX14_CONSTEXPR ENUM &operator&=(ENUM &a, ENUM b) { return a = a & b; } \
MDBX_CXX01_CONSTEXPR ENUM operator~(ENUM a) { \
return ENUM(~std::size_t(a)); \
MDBX_CXX14_CONSTEXPR ENUM &operator&=(ENUM &a, size_t b) { \
return a = a & b; \
} \
MDBX_CXX01_CONSTEXPR std::size_t operator~(ENUM a) { \
return ~std::size_t(a); \
} \
MDBX_CXX01_CONSTEXPR ENUM operator^(ENUM a, ENUM b) { \
return ENUM(std::size_t(a) ^ std::size_t(b)); \