From 6bb71fdd8f7cc346d90fb14beb38b7297fc1ffd9 Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Sun, 26 Jan 2014 13:58:48 +0400 Subject: [PATCH] Fixed incorrect initialization of 128-bit values, when no native support for 128-bit integers is available. --- boost/atomic/detail/cas128strong.hpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/boost/atomic/detail/cas128strong.hpp b/boost/atomic/detail/cas128strong.hpp index 906c13e..dcb4d7d 100644 --- a/boost/atomic/detail/cas128strong.hpp +++ b/boost/atomic/detail/cas128strong.hpp @@ -196,15 +196,17 @@ 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& value, memory_order order = memory_order_seq_cst) volatile BOOST_NOEXCEPT { - storage_type value_s = 0; + storage_type value_s; + memset(&value_s, 0, sizeof(value_s)); memcpy(&value_s, &value, sizeof(value_type)); platform_fence_before_store(order); platform_store128(value_s, &v_); @@ -247,7 +249,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));