diff --git a/src/crypto/sha256_x86_shani.cpp b/src/crypto/sha256_x86_shani.cpp index daccdc51638b..34435a8af0fd 100644 --- a/src/crypto/sha256_x86_shani.cpp +++ b/src/crypto/sha256_x86_shani.cpp @@ -16,6 +16,12 @@ namespace { +#if (defined(__GNUC__) || defined(__clang__)) && !defined(_MSC_VER) +using m128i_u = __m128i_u; +#else +using m128i_u = __m128i; +#endif + alignas(__m128i) const uint8_t MASK[16] = {0x03, 0x02, 0x01, 0x00, 0x07, 0x06, 0x05, 0x04, 0x0b, 0x0a, 0x09, 0x08, 0x0f, 0x0e, 0x0d, 0x0c}; alignas(__m128i) const uint8_t INIT0[16] = {0x8c, 0x68, 0x05, 0x9b, 0x7f, 0x52, 0x0e, 0x51, 0x85, 0xae, 0x67, 0xbb, 0x67, 0xe6, 0x09, 0x6a}; alignas(__m128i) const uint8_t INIT1[16] = {0x19, 0xcd, 0xe0, 0x5b, 0xab, 0xd9, 0x83, 0x1f, 0x3a, 0xf5, 0x4f, 0xa5, 0x72, 0xf3, 0x6e, 0x3c}; @@ -68,12 +74,14 @@ void ALWAYS_INLINE Unshuffle(__m128i& s0, __m128i& s1) __m128i ALWAYS_INLINE Load(const unsigned char* in) { - return _mm_shuffle_epi8(_mm_loadu_si128((const __m128i*)in), _mm_load_si128((const __m128i*)MASK)); + return _mm_shuffle_epi8(_mm_loadu_si128(reinterpret_cast(in)), + _mm_load_si128(reinterpret_cast(MASK))); } void ALWAYS_INLINE Save(unsigned char* out, __m128i s) { - _mm_storeu_si128((__m128i*)out, _mm_shuffle_epi8(s, _mm_load_si128((const __m128i*)MASK))); + _mm_storeu_si128(reinterpret_cast(out), + _mm_shuffle_epi8(s, _mm_load_si128(reinterpret_cast(MASK)))); } } @@ -83,8 +91,8 @@ void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks) __m128i m0, m1, m2, m3, s0, s1, so0, so1; /* Load state */ - s0 = _mm_loadu_si128((const __m128i*)s); - s1 = _mm_loadu_si128((const __m128i*)(s + 4)); + s0 = _mm_loadu_si128(reinterpret_cast(s)); + s1 = _mm_loadu_si128(reinterpret_cast(s + 4)); Shuffle(s0, s1); while (blocks--) { @@ -137,8 +145,8 @@ void Transform(uint32_t* s, const unsigned char* chunk, size_t blocks) } Unshuffle(s0, s1); - _mm_storeu_si128((__m128i*)s, s0); - _mm_storeu_si128((__m128i*)(s + 4), s1); + _mm_storeu_si128(reinterpret_cast(s), s0); + _mm_storeu_si128(reinterpret_cast(s + 4), s1); } } diff --git a/src/memusage.h b/src/memusage.h index 02691bb4b5b8..728edfefa677 100644 --- a/src/memusage.h +++ b/src/memusage.h @@ -28,18 +28,18 @@ namespace memusage static size_t MallocUsage(size_t alloc); /** Dynamic memory usage for built-in types is zero. */ -static inline size_t DynamicUsage(const int8_t& v) { return 0; } -static inline size_t DynamicUsage(const uint8_t& v) { return 0; } -static inline size_t DynamicUsage(const int16_t& v) { return 0; } -static inline size_t DynamicUsage(const uint16_t& v) { return 0; } -static inline size_t DynamicUsage(const int32_t& v) { return 0; } -static inline size_t DynamicUsage(const uint32_t& v) { return 0; } -static inline size_t DynamicUsage(const int64_t& v) { return 0; } -static inline size_t DynamicUsage(const uint64_t& v) { return 0; } -static inline size_t DynamicUsage(const float& v) { return 0; } -static inline size_t DynamicUsage(const double& v) { return 0; } -template static inline size_t DynamicUsage(X * const &v) { return 0; } -template static inline size_t DynamicUsage(const X * const &v) { return 0; } +static inline size_t DynamicUsage(int8_t) { return 0; } +static inline size_t DynamicUsage(uint8_t) { return 0; } +static inline size_t DynamicUsage(int16_t) { return 0; } +static inline size_t DynamicUsage(uint16_t) { return 0; } +static inline size_t DynamicUsage(int32_t) { return 0; } +static inline size_t DynamicUsage(uint32_t) { return 0; } +static inline size_t DynamicUsage(int64_t) { return 0; } +static inline size_t DynamicUsage(uint64_t) { return 0; } +static inline size_t DynamicUsage(float) { return 0; } +static inline size_t DynamicUsage(double) { return 0; } +template static inline size_t DynamicUsage(X* const) { return 0; } +template static inline size_t DynamicUsage(const X* const) { return 0; } /** Compute the memory used for dynamically allocated but owned data structures. * For generic data types, this is *not* recursive. DynamicUsage(vector >) diff --git a/src/script/script.h b/src/script/script.h index b06be9c975d3..fb730024d44e 100644 --- a/src/script/script.h +++ b/src/script/script.h @@ -235,7 +235,7 @@ class CScriptNum */ public: - explicit CScriptNum(const int64_t& n) + explicit CScriptNum(int64_t n) { m_value = n; } @@ -269,21 +269,21 @@ class CScriptNum m_value = set_vch(vch); } - inline bool operator==(const int64_t& rhs) const { return m_value == rhs; } - inline auto operator<=>(const int64_t& rhs) const { return m_value <=> rhs; } + inline bool operator==(int64_t rhs) const { return m_value == rhs; } + inline auto operator<=>(int64_t rhs) const { return m_value <=> rhs; } inline bool operator==(const CScriptNum& rhs) const { return operator==(rhs.m_value); } inline auto operator<=>(const CScriptNum& rhs) const { return operator<=>(rhs.m_value); } - inline CScriptNum operator+( const int64_t& rhs) const { return CScriptNum(m_value + rhs);} - inline CScriptNum operator-( const int64_t& rhs) const { return CScriptNum(m_value - rhs);} + inline CScriptNum operator+( int64_t rhs) const { return CScriptNum(m_value + rhs);} + inline CScriptNum operator-( int64_t rhs) const { return CScriptNum(m_value - rhs);} inline CScriptNum operator+( const CScriptNum& rhs) const { return operator+(rhs.m_value); } inline CScriptNum operator-( const CScriptNum& rhs) const { return operator-(rhs.m_value); } inline CScriptNum& operator+=( const CScriptNum& rhs) { return operator+=(rhs.m_value); } inline CScriptNum& operator-=( const CScriptNum& rhs) { return operator-=(rhs.m_value); } - inline CScriptNum operator&( const int64_t& rhs) const { return CScriptNum(m_value & rhs);} + inline CScriptNum operator&( int64_t rhs) const { return CScriptNum(m_value & rhs);} inline CScriptNum operator&( const CScriptNum& rhs) const { return operator&(rhs.m_value); } inline CScriptNum& operator&=( const CScriptNum& rhs) { return operator&=(rhs.m_value); } @@ -294,13 +294,13 @@ class CScriptNum return CScriptNum(-m_value); } - inline CScriptNum& operator=( const int64_t& rhs) + inline CScriptNum& operator=( int64_t rhs) { m_value = rhs; return *this; } - inline CScriptNum& operator+=( const int64_t& rhs) + inline CScriptNum& operator+=( int64_t rhs) { assert(rhs == 0 || (rhs > 0 && m_value <= std::numeric_limits::max() - rhs) || (rhs < 0 && m_value >= std::numeric_limits::min() - rhs)); @@ -308,7 +308,7 @@ class CScriptNum return *this; } - inline CScriptNum& operator-=( const int64_t& rhs) + inline CScriptNum& operator-=( int64_t rhs) { assert(rhs == 0 || (rhs > 0 && m_value >= std::numeric_limits::min() + rhs) || (rhs < 0 && m_value <= std::numeric_limits::max() + rhs)); @@ -316,7 +316,7 @@ class CScriptNum return *this; } - inline CScriptNum& operator&=( const int64_t& rhs) + inline CScriptNum& operator&=( int64_t rhs) { m_value &= rhs; return *this; @@ -338,7 +338,7 @@ class CScriptNum return serialize(m_value); } - static std::vector serialize(const int64_t& value) + static std::vector serialize(int64_t value) { if(value == 0) return std::vector(); diff --git a/src/test/allocator_tests.cpp b/src/test/allocator_tests.cpp index 65a0629d9e82..f454bb49d887 100644 --- a/src/test/allocator_tests.cpp +++ b/src/test/allocator_tests.cpp @@ -5,6 +5,8 @@ #include #include +#include +#include #include #include #include @@ -220,8 +222,11 @@ BOOST_AUTO_TEST_CASE(lockedpool_tests_live) void *a0 = pool.alloc(16); BOOST_CHECK(a0); // Test reading and writing the allocated memory - *((uint32_t*)a0) = 0x1234; - BOOST_CHECK(*((uint32_t*)a0) == 0x1234); + uint32_t value = 0x1234; + std::memcpy(a0, &value, sizeof(value)); + uint32_t read_value; + std::memcpy(&read_value, a0, sizeof(read_value)); + BOOST_CHECK_EQUAL(read_value, value); pool.free(a0); try { // Test exception on double-free diff --git a/src/test/cuckoocache_tests.cpp b/src/test/cuckoocache_tests.cpp index 5c723596e77a..43418acb57b9 100644 --- a/src/test/cuckoocache_tests.cpp +++ b/src/test/cuckoocache_tests.cpp @@ -3,6 +3,7 @@ // file COPYING or http://www.opensource.org/licenses/mit-license.php. #include +#include #include #include