From e4bde20f2eec0a51be14533871d2123bd2ab9cf3 Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Fri, 28 Feb 2014 12:43:11 +0400 Subject: [PATCH] More compilation fixes for the case when 128-bit integers are not supported. --- boost/atomic/detail/gcc-atomic.hpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/boost/atomic/detail/gcc-atomic.hpp b/boost/atomic/detail/gcc-atomic.hpp index a130590..4af99a1 100644 --- a/boost/atomic/detail/gcc-atomic.hpp +++ b/boost/atomic/detail/gcc-atomic.hpp @@ -958,14 +958,16 @@ class base_atomic public: BOOST_DEFAULTED_FUNCTION(base_atomic(void), {}) - explicit base_atomic(value_type const& v) BOOST_NOEXCEPT : v_(0) + explicit base_atomic(value_type const& v) BOOST_NOEXCEPT { + memset(&v_, 0, sizeof(v_)); memcpy(&v_, &v, sizeof(value_type)); } void store(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - storage_type tmp = 0; + storage_type tmp; + memset(&tmp, 0, sizeof(tmp)); memcpy(&tmp, &v, sizeof(value_type)); __atomic_store_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); } @@ -980,7 +982,8 @@ class base_atomic value_type exchange(value_type const& v, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - storage_type tmp = 0; + storage_type tmp; + memset(&tmp, 0, sizeof(tmp)); memcpy(&tmp, &v, sizeof(value_type)); tmp = __atomic_exchange_n(&v_, tmp, atomics::detail::convert_memory_order_to_gcc(order)); value_type res; @@ -994,7 +997,9 @@ class base_atomic memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { - storage_type expected_s = 0, desired_s = 0; + storage_type expected_s, desired_s; + memset(&expected_s, 0, sizeof(expected_s)); + memset(&desired_s, 0, sizeof(desired_s)); memcpy(&expected_s, &expected, sizeof(value_type)); memcpy(&desired_s, &desired, sizeof(value_type)); const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, false, @@ -1010,7 +1015,9 @@ class base_atomic memory_order success_order, memory_order failure_order) volatile BOOST_NOEXCEPT { - storage_type expected_s = 0, desired_s = 0; + storage_type expected_s, desired_s; + memset(&expected_s, 0, sizeof(expected_s)); + memset(&desired_s, 0, sizeof(desired_s)); memcpy(&expected_s, &expected, sizeof(value_type)); memcpy(&desired_s, &desired, sizeof(value_type)); const bool success = __atomic_compare_exchange_n(&v_, &expected_s, desired_s, true,